![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка текстового файла большого объема
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 Мб - это небольшой объем