Чтение Из Тхт Файла Построчно

Serduko

Well-known member
11.10.2011
170
0
#1
Использую такой вариант перебора строк:
Код:
While text0 <> ""
str0 = StrLeft(text0,strEnter,1)
...
<обработка строки>
...
text0 = StrRight(text0,strEnter,1)
Wend
Но он как показывает практика не очень быстр при больших обьемах файла (65000 строк).

Есть ли более "красивые" варианты?
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#2
Во-первых используется небыстрая проверка:
text0 <> ""
гораздо лучше:
Len(sText) <> 0.

Во-вторых, по моему, лучше прочитать весь файл (всё содержимое) сразу с помощью NotesStream (если речь идёт только о LS) - это чуток ударит по памяти, но по скорости результат будет лучше, затем преобразовать в массив с помощью Split(sText, sSeparator) + сразу же очистить строку, и потом пробежаться по массиву - получение строк LS-функцией будет значительно быстрее.

P.S. Поделитесь результатами измерения времени ;)
 

Serduko

Well-known member
11.10.2011
170
0
#3
Во-первых используется небыстрая проверка:
text0 <> ""
гораздо лучше:
Len(sText) <> 0.

Во-вторых, по моему, лучше прочитать весь файл (всё содержимое) сразу с помощью NotesStream (если речь идёт только о LS) - это чуток ударит по памяти, но по скорости результат будет лучше, затем преобразовать в массив с помощью Split(sText, sSeparator) + сразу же очистить строку, и потом пробежаться по массиву - получение строк LS-функцией будет значительно быстрее.

P.S. Поделитесь результатами измерения времени ;)
скрипт одноразовый, так что я не заморачивался на мелочи, такие как "text0 <> """
NotesStream и так использовал, т.е. переменная text0 содержала уже выгруженные из файла даные.
Split - то что мне было нужно, благодарю ;)
к сожалению не удалось сделать единый массив на 65000 тыс ячеек, пришлось разбить таким образом:
Код:
While text0 <> ""
strarr = Split(text0,strEnter,10000)
stend = UBound(strarr)
If UBound(strarr) = 9999 Then
text0 = strarr(UBound(strarr))
strarr(UBound(strarr)) = ""
stend = stend - 1
Else
text0 = ""
End If

For st = 0 To stend
...
Next
Wend
Прошлый вариант работал бы наверно часа 4, текущий выполняется 5 мин.