gpt4 book ai didi

vbscript - 用VBS每行读取一个txt文件

转载 作者:行者123 更新时间:2023-12-04 03:20:52 25 4
gpt4 key购买 nike

我正在尝试以下代码:

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

为什么在两种情况下它都立即回显所有行,并且当然我无法逐行工作?任何想法?

最佳答案

您的文件包含有趣的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()上的Split()将失败:
>> t = goFS.OpenTextFile(fn).ReadAll()
>> a = Split(t, vbCrLf)
>> WScript.Echo UBound(a)
>> WScript.Echo a(0)
>>
0
a
b
c

t不包含单个vbCrLf,因此 Split()返回UBound()== 0的数组,其中包含t作为其单个元素。 。回声至少看起来像3(4)行。如果确实需要行数组,则可以在vbLf上使用Split()。

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

.ReadLine()无法应付vbCr(mac):
>> 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

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

但是,如果您的文件包含vbCr结尾,那么您的所有代码段都无法“一次填充所有行”。

您的文件是否来自外层空间?

更新wrt评论:

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

知道使用哪种EOL标记仍然很有趣。

关于vbscript - 用VBS每行读取一个txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com