Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.02.2018, 23:41   #1
Taras2018
Пользователь
 
Аватар для Taras2018
 
Регистрация: 13.01.2018
Сообщений: 47
По умолчанию Чтение построчно 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;
Taras2018 вне форума
Старый 24.02.2018, 01:38   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Что делает этот код - понятно.
А какова его цель?
------------
100500 тыщщщ перераспределений памяти в одном цикле. Я своим падаванам за такой код могу пальцы сломать. И они это знают.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума
Старый 24.02.2018, 01:47   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тут в общем-то нет построчного чтения..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 24.02.2018, 01:53   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
тут в общем-то нет построчного чтения..
Мало того. Для файлов таких объёмов TStringList применять очень накладно. На порядок быстрее будет работать через какойнить потомок TStream. Писать поиск массива байт в стриме даже не нужно: всё уже давно написано и валяется в интернетах.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума
Старый 24.02.2018, 02:00   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от Taras2018 Посмотреть сообщение
В данном коде при обработке файла в 100 мегабайт
А вот не верю.
Out of memory в данном коде может возникнуть только из-за дефрагментации памяти при выполнении строки
Код:
str :=list.Strings[i];
Но как я не прикидывал возможные размеры строк и их количество в текстовом файле размером 100 МБ, у меня ничего не получилось.
northener вне форума
Старый 24.02.2018, 02:07   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык может у него 2 ГБ памяти, из которых почти все заняли винда и браузер.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 24.02.2018, 02:14   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Дык может у него 2 ГБ памяти, из которых почти все заняли винда и браузер.
Вообще-то у нас у всех либо чуть менее 4ГБ памяти, либо (боюсь даже сказать сколько!).
Alex11223, вы об чем собственно?
northener вне форума
Старый 24.02.2018, 08:27   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
list.LoadFromFile(...);
list.text:=StringReplace(list.Text, '', Edit1.Text, [rfreplaceall]);
list.SaveToFile(...);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума
Старый 24.02.2018, 09:18   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
list.text
это короче в исходнике, но памяти еще больше потребуется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.02.2018 в 09:26.
Аватар вне форума
Старый 24.02.2018, 11:03   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Вообще-то у нас у всех либо чуть менее 4ГБ памяти
У кого у всех? У меня 32.

Цитата:
Сообщение от northener Посмотреть сообщение
вы об чем собственно?
Про
Цитата:
Сообщение от northener Посмотреть сообщение
не верю.
Out of memory в данном коде может возникнуть только из-за дефрагментации памяти при выполнении строки
Почему он не может возникнуть при загрузке содержимого файла если у автора нет свободных 100+ МБ? (а может и 200+ если оно конвертирует в юникод из ansi)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла построчно переменных разного типа - Pascal ABC bdfy Паскаль, Turbo Pascal, PascalABC.NET 11 26.02.2017 14:02
Delphi XE4 и формы Александр_Фролово Общие вопросы Delphi 21 02.08.2014 09:32
Delphi XE4 Simon1712 Общие вопросы Delphi 2 14.09.2013 04:40
Load exe into memory and run it from memory artush1984 Win Api 10 06.02.2012 18:43
Чтение файла построчно aciiiD Компоненты Delphi 11 26.08.2009 16:36