0

出于某种原因,当我使用 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

我没有为每一行发出警报,而是收到一个包含整个文件的警报。任何帮助表示赞赏。

4

2 回答 2

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
于 2013-06-19T00:39:42.553 回答
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等)也可以进行这种转换。

于 2013-06-19T07:32:14.960 回答