Vbscript 用VBS逐行读取txt文件

Vbscript 用VBS逐行读取txt文件,vbscript,fso,Vbscript,Fso,我正在尝试以下代码: filename = "test.txt" listFile = fso.OpenTextFile(filename).ReadAll listLines = Split(listFile, vbCrLf) For Each line In listLines WScript.Echo line 'My Stuff Next 或其他: filename = "test.txt" Set fso = CreateObject("Scripting.F

我正在尝试以下代码:

filename = "test.txt"
listFile  = fso.OpenTextFile(filename).ReadAll
listLines = Split(listFile, vbCrLf)
For Each line In listLines
   WScript.Echo line 
   'My Stuff
Next
或其他:

filename = "test.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(filename, ForReading)
    Do Until f.AtEndOfStream
      myLine = f.ReadLine
      WScript.Echo myLine
      'My Stuff
    Loop

为什么在这两种情况下,它一次回响所有的行,当然我不能一行一行地工作?有什么想法吗?

您的代码似乎运行良好。我稍微修改了一下,以表明这些行实际上是逐行阅读的:

Set fso=CreateObject("Scripting.FileSystemObject")

filename = "test.txt"
listFile = fso.OpenTextFile(filename).ReadAll
listLines = Split(listFile, vbCrLf)
i = 0

For Each line In listLines
   WScript.Echo CStr(i) + " : " + line 
   i = i + 1

   'My Stuff
Next
我假设
fso
设置在脚本中的某个地方,但为了完整起见,我添加了额外的一行


您应该确认您的输入文件确实有多行由
vbCrLf
分隔。计数器
i
有助于调试每一行,因为它在读取行的过程中显示行索引。

您的文件具有有趣的EndOfLine标记。假设这些行由vbLf终止:

>> fn = "lf.txt"
>> goFS.CreateTextFile(fn).Write Replace("a b c ", " ", vbLf)
>> set ts = goFS.OpenTextFile(fn)
>> do until ts.AtEndOfStream
>>    WScript.Echo ts.ReadLine
>> loop
>>
a
b
c
如您所见,.ReadLine可以处理vbLf(unix)。但是,您在.ReadAll()上的拆分()将失败:

>> t = goFS.OpenTextFile(fn).ReadAll()
>> a = Split(t, vbCrLf)
>> WScript.Echo UBound(a)
>> WScript.Echo a(0)
>>
0
a
b
c
t不包含单个vbCrLf,因此返回一个UBound()==0的数组,其中包含t作为其单个元素。回音至少看起来像3(4)行。如果确实需要一个行数组,可以在vbLf上拆分()

但是如果文件包含vbLf结尾,那么.ReadLine循环应该可以正常工作

.ReadLine()无法处理vbCr(mac):

b+cr“覆盖”a+cr,然后被c+cr“覆盖”。ReadAll()方法也将失败,除非使用vbCr作为分隔符

但如果您的文件包含vbCr结尾,则您的代码段中没有一个可以“一次回显所有行”

你的文件来自外太空吗

更新wrt注释:

你不能。将该文件转换为UTF-16,并在.OpenTextFile创建文件时使用format参数的Unicode选项,或者使用ADODB流


知道使用什么EOL标记仍然很有趣。

+1用于外层空间问题。(我想知道为什么没有人在问题注释中要求一个示例文件?)我的文件来自notepad++大约20.000行,在ANSI(使用utf8测试,没有bom)和Windows64下。我认为问题来自源文件,我正在使用另一个脚本创建它,该脚本使用myFile.WriteLine(line.Item(0))附加一行新行我做错了吗?太好了最后问题是由EndOfLine标记引起的,谢谢!
>> fn = "cr.txt"
>> goFS.CreateTextFile(fn).Write Replace("a b c ", " ", vbCr)
>>
>> set ts = goFS.OpenTextFile(fn)
>> do until ts.AtEndOfStream
>>    WScript.Echo ts.ReadLine
>> loop
>>
c