Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Обработка текстового файла большого объема   Найти похожие ветки 

 
Pavel   (2010-02-25 17:15) [0]

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


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

MMF

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


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

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


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


> Pavel   (25.02.10 17:15)  


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


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

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


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;


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

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


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


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

> FilRead: TReader;

что это?

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

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


 
sniknik ©   (2010-02-25 23:30) [6]

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

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


 
sniknik ©   (2010-02-25 23:32) [7]

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


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


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

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


 
KilkennyCat ©   (2010-02-25 23:38) [9]

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


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

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


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

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


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

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


 
Игорь Шевченко ©   (2010-02-26 00:21) [13]


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


Да, при подобных способах обработки это очень большой объем


 
KilkennyCat ©   (2010-02-26 00:31) [14]

всего-то четверть миллиарда итераций


 
sniknik ©   (2010-02-26 00:43) [15]

> Да, при подобных способах обработки это очень большой объем
> всего-то четверть миллиарда итераций
а представляете, что будет когда автор узнает о битовых операциях... ;)


 
KilkennyCat ©   (2010-02-26 00:47) [16]

фигня, ща в процессорах много ядер, достаточно грамотно написать в описании программы требования к компу.


 
Германн ©   (2010-02-26 01:11) [17]


> sniknik ©   (26.02.10 00:43) [15]
>
> > Да, при подобных способах обработки это очень большой
> объем
> > всего-то четверть миллиарда итераций
> а представляете, что будет когда автор узнает о битовых
> операциях... ;)
>

Тогда уже речь будет идти о квинтиллионах итераций :)
А TMemo наконец-то удалят из палитры компонент тогдашнего потомка Дельфи!!!
(Или компилятор станет настолько умным, что будет выдавать предупреждения об увольнении при компиляции подобного кода :).


 
KilkennyCat ©   (2010-02-26 01:21) [18]


> Германн ©

Это утопия... скорее всего, программы будут писать себя сами... или будет уже одна Идеальная Программа, могущая все.

А фактически, мне приходилось парсить побайтно и большие размеры... и ниче, даж обидно было, что прогрессбар слишком быстро бежит.


 
Германн ©   (2010-02-26 01:30) [19]


> и ниче, даж обидно было, что прогрессбар слишком быстро
> бежит.

Да. Однажды я так старался сделать красивую визуализацию процесса обработки. И всё коту под хвост! :)
Всё пролетало так, что ничего не видно было.


 
KilkennyCat ©   (2010-02-26 01:35) [20]

хуже того - от скорости и длинны прогрессбара зависит стоимость программы. чем длиннее и медленнее - тем дороже.


 
Германн ©   (2010-02-26 01:57) [21]


> KilkennyCat ©   (26.02.10 01:35) [20]
>
> хуже того - от скорости и длинны прогрессбара зависит стоимость
> программы. чем длиннее и медленнее - тем дороже.
>

В точку!
Подробности письмом.


 
Anatoly Podgoretsky ©   (2010-02-26 10:53) [22]


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

А говорил про TextFile


 
Anatoly Podgoretsky ©   (2010-02-26 10:54) [23]


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

Отвратительно написаная процедула, побайтовое чтение, большой расход памяти. Переписать все нафиг.


 
Anatoly Podgoretsky ©   (2010-02-26 10:56) [24]


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

Почему, реально же не большой.


 
Anatoly Podgoretsky ©   (2010-02-26 10:58) [25]


> А TMemo наконец-то удалят из палитры компонент тогдашнего
> потомка Дельфи!!!

И заменят на MemoCharByChar


 
sniknik ©   (2010-02-26 11:51) [26]

> И заменят на MemoCharByChar
MemoBitCharByBit


 
KilkennyCat ©   (2010-02-26 11:52) [27]

Забыли приставку Nano. Говорят, это - модно.


 
Anatoly Podgoretsky ©   (2010-02-26 11:55) [28]

> sniknik  (26.02.2010 11:51:26)  [26]

Ну так были же вопросы, как прочитать один бит из файла. Очень нужный мемо


 
Демо ©   (2010-02-27 21:25) [29]


> Ну так были же вопросы, как прочитать один бит из файла.


Путём нехитрых манипуляций можно и бит получить... ;)


 
Anatoly Podgoretsky ©   (2010-02-27 21:30) [30]

Бит получить легко, прочитать сложно.


 
Демо ©   (2010-02-27 21:55) [31]


> Anatoly Podgoretsky ©   (27.02.10 21:30) [30]
> Бит получить легко, прочитать сложно.


Ну никто же не заставляет этот бит самому читать;)

Заставляем прочитать система, либо другое приложение, подсовываем ему переменную для установки бита. Вот и всё.
По-существу читаем бит из файла.

-)


 
KilkennyCat ©   (2010-02-27 22:05) [32]

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



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.061 c
15-1266341008
NewZ
2010-02-16 20:23
2010.08.27
Книга по БД.


2-1269192497
Мевилл
2010-03-21 20:28
2010.08.27
Индексы в delphi 2009


2-1271922885
kudatsky
2010-04-22 11:54
2010.08.27
Попадает ли точка в замкнутый многоугольник


9-1185113429
AlexanderMS
2007-07-22 18:10
2010.08.27
Ограждение округлой формы.


15-1265751005
Юрий
2010-02-10 00:30
2010.08.27
С днем рождения ! 10 февраля 2010 среда