Ekkehard.Hor..
12
您的文件具有有趣的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评论:
您无法使用Filesystemobject读取UTF-8.将文件转换为UTF-16并在.OpenTextFile时使用format参数的Unicode选项,或使用ADODB Stream.
知道使用什么EOL标记仍然很有趣.