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