Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.061 c
4-1172734473
Darth Avenger
2007-03-01 10:34
2010.08.27
Купюроприемник CashCode, протокол ccnet


2-1267595287
allrussia
2010-03-03 08:48
2010.08.27
Перекодировка русского текста DOS+ANSI в ANSI


2-1274176208
Petr
2010-05-18 13:50
2010.08.27
Работа с ADO


2-1273431911
FIL-23
2010-05-09 23:05
2010.08.27
как пользоваться sql


15-1271958315
TUser
2010-04-22 21:45
2010.08.27
Оппозиции на заметку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский