В вашем файле есть забавные маркеры 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). Однако ваш Split() на .ReadAll() завершится ошибкой:
>> 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) строки. Вы можете использовать Split() в vbLf, если вам действительно нужен массив строк.
Но если ваши файлы содержат окончания 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. Подход .ReadAll() также потерпит неудачу, если вы не используете vbCr в качестве разделителя.
Но если ваши файлы содержат окончания vbCr, ни один из ваших фрагментов не может "отображать все строки одновременно".
Ваш файл пришел из космоса?
Обновить комментарий:
Вы не можете читать UTF-8 с помощью объекта Filesystem. Либо преобразуйте файл в UTF-16 и используйте параметр Unicode параметра формата, когда он .OpenTextFile, либо работайте с потоком ADODB.
Еще было бы интересно узнать, какой маркер EOL используется.
person
Ekkehard.Horner
schedule
12.05.2014