|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Чтение построчно out of memory / Delphi XE4
В данном коде при обработке файла в 100 мегабайт выскакивает ошибка: out of memory. Как переделать этот код что бы не было ошибки - недостаточно памяти ?
Код:
var list: TStrings; i:integer; str:string; begin list :=TStringList.Create; list.LoadFromFile(OpenDialog1.FileName); for i :=list.count-1 downto 0 do begin str :=list.Strings[i]; while Pos(edit1.text, str) >0 do begin Delete(str, Pos(edit1.text, str), Length(edit1.text)) ; list.Strings[i] :=str; end; end; list.SaveToFile('out.txt'); list.free; end; |
#2
|
|||
|
|||
Читать по строкам через AssignFile/Reset/Readln/CloseFile, т.е. только одну строчку за раз. Ну и писать тоже так же...
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Taras2020 (24.02.2018)
|
#3
|
||||
|
||||
Вот интереса ради проверил данный блок без изменений на более чем в 10 раз большем текстовике, для "жести" из древнего нубука (toughbook, 32ХР) предварительно оперативку вытащил, осталась лишь планка в 2Гб - прекрасно оно работает, без ошибок и "лишнее" во время исполнения нормально к файлу подкачки улетает, может железо глючит?
Замечание по коду: можно легко выкрутасы с delete на stringreplace заменить, будет меньше строчек без цикла Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Taras2020 (28.02.2018)
|