Форум: "Начинающим";
Текущий архив: 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