![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
В данном коде при обработке файла в 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)
| ||