vbscript skipline和cr line endings

时间:2013-06-18 23:40:17

标签: asp-classic vbscript filesystemobject

出于某种原因,当我使用objFile.ReadLine方法读取我的文本文件时,整个文件将作为一个长行返回。我正在打开的文件是使用CR行结尾而不是CRLF或LF行结尾。如果ReadLine无法识别CR行结尾,是否有人知道如何在vbscript中逐行读取此文件?代码如下:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set txsInput = objFSO.OpenTextFile("C:\Path\To\My\File.csv",1)
'Read lines one by one 
Do While txsInput.AtEndOfStream <> True
  strTemp = txsInput.ReadLine
  msgbox strTemp
Loop

而不是警告每一行,我得到一个整个文件的警报。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

也许不是最好的想法(也没有经过测试),但试试这个。

Do Until txsInput.AtEndOfStream
    strTemp = ""
    Do
        strChar = txsInput.Read(1)
        If strChar <> vbCr Then
            strTemp = strTemp & strChar
        Else
            Exit Do
        End If
    Loop
    If Len(strTemp) Then MsgBox strTemp
Loop

答案 1 :(得分:1)

.ReadLine在您的情况下不起作用,因为它取决于vbLf字符的存在。如果您不想重新编码换行符,可以执行Panayot Karabakalov建议的内容(如果文件很大),或者读取整个文件并将其拆分为vbCr(如果文件不是那么大):

text = objFSO.OpenTextFile("C:\Path\To\My\File.csv").ReadAll
For Each line In Split(text, vbCr)
  MsgBox line
Next

重新编码文件可以这样做:

Set fso = CreateObject("Scripting.FileSystemObject")

filename = "C:\path\to\your.csv"

Set infile  = fso.OpenTextFile(filename)
Set outfile = fso.OpenTextFile(filename & ".tmp", 2)

Do Until infile.AtEndOfStream
  c = infile.Read(1)
  If c = vbCr Then
    outfile.Write vbCrLf
  Else
    outfile.Write c
  End If
Loop

infile.Close
outfile.Close

fso.DeleteFile filename, True
fso.MoveFile filename & ".tmp", filename

或者您可以使用recode之类的内容进行转换。大多数文字编辑器(例如VimNotepad++SciTEUltraEdit,...)也可以进行此类转换。