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

Тема в разделе "Lotus - Программирование", создана пользователем Serduko, 29 янв 2012.

  1. Serduko

    Serduko Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    174
    Симпатии:
    0
    Использую такой вариант перебора строк:
    Код (LotusScript):
    While text0 <> ""
    str0 = StrLeft(text0,strEnter,1)
    ...
    <обработка строки>
    ...
    text0 = StrRight(text0,strEnter,1)
    Wend
    Но он как показывает практика не очень быстр при больших обьемах файла (65000 строк).

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

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Во-первых используется небыстрая проверка:
    text0 <> ""
    гораздо лучше:
    Len(sText) <> 0.

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

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

    Serduko Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    174
    Симпатии:
    0
    скрипт одноразовый, так что я не заморачивался на мелочи, такие как "text0 <> """
    NotesStream и так использовал, т.е. переменная text0 содержала уже выгруженные из файла даные.
    Split - то что мне было нужно, благодарю ;)
    к сожалению не удалось сделать единый массив на 65000 тыс ячеек, пришлось разбить таким образом:
    Код (LotusScript):
    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 мин.
     
Загрузка...

Поделиться этой страницей