• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Serduko
  • Дата начала
S

Serduko

Использую такой вариант перебора строк:
Код:
While text0 <> ""
str0 = StrLeft(text0,strEnter,1)
...
<обработка строки>
...
text0 = StrRight(text0,strEnter,1)
Wend

Но он как показывает практика не очень быстр при больших обьемах файла (65000 строк).

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

VladSh

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

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

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

Serduko

Во-первых используется небыстрая проверка:
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 мин.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!