出于某种原因,当我使用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
而不是警告每一行,我得到一个整个文件的警报。任何帮助表示赞赏。
答案 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
之类的内容进行转换。大多数文字编辑器(例如Vim,Notepad++,SciTE,UltraEdit,...)也可以进行此类转换。