Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка текстового файла большого объема


Страницы:   1 2

Pavel ©   (2010-02-25 17:15:00) 

Имеется текстовый файл размером 250 МБ. Создаю переменную типа TextFile и с помщью ReadLn начинаю считывать данные из файла и сохранять в массив. Проблема в том что не удается полностью прочитать файл, так как в определенный момент программа зависает. Какие могут быть варианты для решения подобной проблемы?


KilkennyCat   (2010-02-26 00:10:00) [21]

вообще-то, для хранения 250 мб текстового файла потребуется около 20 дискет


sniknik   (2010-02-26 00:03:00) [22]

что, передумал, и теперь считаешь 250мб большим объемом? :о))


Игорь Шевченко   (2010-02-25 23:58:00) [23]

пост [1] прошу считать недействительным


KilkennyCat   (2010-02-25 23:38:00) [24]

И еще: что создается, то должно быть уничтожено. Иначе будет полный китай.


KilkennyCat   (2010-02-25 23:36:00) [25]


> sniknik ©   (25.02.10 23:32) [7]

я замечу, что в твоем варианте крайне сложно реализовать такую "логику" :)


sniknik   (2010-02-25 23:32:00) [26]

> Каждый раз, когда он будет встерчаться, мемо будет очищаться
сорри, не обратил внимания, у моего "аналога" логика немного другая.


sniknik   (2010-02-25 23:30:00) [27]

> Вот процедура, которая собственно и обрабатывает файл:
а вот собственно аналог.

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.LoadFromFile('D:\FilStTest\moscow5.osm');
 ShowMessage('Complite');
end;


KilkennyCat   (2010-02-25 23:28:00) [28]

ох, что это...


> Создаю переменную типа TextFile и с помщью ReadLn начинаю
> считывать данные из файла и сохранять в массив.


где это в приведенном коде?

> FilRead: TReader;

что это?

> FilStr.Read(c,1);
>  if c=#10 then

ты уверен насчет разделителя? Каждый раз, когда он будет встерчаться, мемо будет очищаться, S будет добавляться, потом стираться и в итоге ты получишь только одну строку до последнего встретившегося разделителя.
И границы цикла. Уверен, что с нуля до полного размера?


Pavel   (2010-02-25 23:20:00) [29]

Вот процедура, которая собственно и обрабатывает файл:


procedure TForm1.Button1Click(Sender: TObject);
var FilStr: TFileStream;
   FilRead: TReader;
   St1: TStream;
   s: string;
   c: char;
   i: integer;
begin
FilStr:=TFileStream.Create('D:\FilStTest\moscow5.osm', fmOpenReadWrite);
ShowMessage(IntToStr(FilStr.Size));

St1:=TStream.Create;

for i:=0 to FilStr.Size do
 begin
 FilStr.Read(c,1);
 if c=#10 then
   begin
   Memo1.Clear;
   Memo1.Lines.Add(s);
   s:='';
   end
 else
 s:=s+c;
 end;

ShowMessage('Complite');
end;


Игорь   (2010-02-25 18:03:00) [30]


> Pavel   (25.02.10 17:15)  


Посмотри здесь http://atorg.net.ru/delphi/atviewer.htmтам, вроде бы исходники есть, копай в эту сторону


gggg   (2010-02-25 17:46:00) [31]

Вариантов куча.
Самый верный способ -- внимательно перечитать текст программы и найти ошибку.
Второй вариант -- дождаться, когда на форум заглянут телепаты и помогут тебе.
И последний -- выложить текст программы здесь. Но это слишком простой и доступный способ, так делают только те, кто хочет получить ответ. Ты же так не поступишь, верно?


Игорь Шевченко   (2010-02-25 17:44:00) [32]

MMF

250 Мб - это небольшой объем


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо