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

Вниз

Количество строк   Найти похожие ветки 

 
UK-AAV   (2005-07-20 22:31) [0]

В программе требуется часто считать кол-во строк в текстовом файле при этом важна скорость. Файл примерно состоит из последовательности строк
1) макс 420 символов
2) 12 символов
3) 16 символов
всего строк около 1000.


 
Kerk ©   (2005-07-20 22:45) [1]

Можно считывать побайтно или повордно и считать кол-во переводов строки.


 
UK-AAV   (2005-07-20 22:48) [2]

это понятно, но вопрос возник из-за скорости. на медленных компах(pentium 166) частое перечитывание всех байтов очень тормозит. Отсюда и вопрос.


 
ferr ©   (2005-07-20 23:24) [3]


> UK-AAV   (20.07.05 22:48) [2] [Новое
> сообщение][Ответить]

Вы что-то ещё можете предложить?


 
kull   (2005-07-20 23:39) [4]

А поподробнее про формат файла можно, или он "примерный"? :)


 
Anatoly Podgoretsky ©   (2005-07-21 00:09) [5]

UK-AAV   (20.07.05 22:31)  
В данном случае хорошо подойдет TStringList


 
Германн ©   (2005-07-21 02:00) [6]

2 UK-AAV   (20.07.05 22:48) [2]
Может быть стоит читать сначала весь файл как бинарный, а после искать в нем "количество переводов строк"?


 
UK-AAV   (2005-07-21 08:32) [7]

to kull
Файле лежит инфа:
строка с текстом(макс 420 символов
строка данных 12
строка данных 16
строка с текстом(макс 420 символов
строка данных 12
строка данных 16
.............
а если файл для этого загружать как file of string?


 
Джо ©   (2005-07-21 08:41) [8]


> а если файл для этого загружать как file of string?

Судя по твоему описанию, он никак не является file of string. Кроме того, в данной декларации можно использовать только ShortString - явно или неявно.


 
evvcom ©   (2005-07-21 08:46) [9]


> В программе требуется часто считать кол-во строк в текстовом
> файле при этом важна скорость.

У меня была подобная задача. Самым быстрым способом я посчитал анализ файла с созданием своеобразного файла индексов. В нем записывается дата/время изменения txt-файла, его длина (для определения факта его изменения), признак валидности файла, а дальше количества и смещения начал строк. Естественно твой инд.файл должен быть по максимуму адаптирован под твой txt-файл.


 
Anatoly Podgoretsky ©   (2005-07-21 08:53) [10]

UK-AAV   (21.07.05 08:32) [7]
Следует ли понимать, что все строки строго такой структуры и размера? Тогда FileSize / n


 
Alx2 ©   (2005-07-21 09:01) [11]

UK-AAV   (20.07.05 22:31)

Memory Mapped File + количество концов строк


 
Anatoly Podgoretsky ©   (2005-07-21 09:03) [12]

Пусть сначала ответит на 5 и 10


 
UK-AAV   (2005-07-21 10:17) [13]

To Alx2
 первые строки всегда разной длинны

Наверное сделаю по совету evvcom. Только в моем случае будет проще, если FileSize начал отличаться, то кол-во строк точно увеличевается на 3.

всем спасибо


 
isasa ©   (2005-07-21 10:32) [14]

1.Следить за изменением файла.
2.Читать в память низкоуровневыми IO ф-циями типа BlockRead.
3. а потом хоть

Count:=0;
for i:=BuffLen downto 0 do if Buff[i]=#$0A then inc(Count);


 
Alx2 ©   (2005-07-21 10:44) [15]

UK-AAV   (21.07.05 10:17) [13]
> первые строки всегда разной длинны

Одинаковость и не требуется

>если FileSize начал отличаться..

Имхо, самое оптимальное, если история этих изменений FileSize хранится.


 
MegaVolt ©   (2005-07-21 11:39) [16]

А кто изменяет этот файл? Внешняя программа а ты должен его анализировать в реальном времени?

Я так понимаю весь файл 450000 кило. Время анализа будет ограниченно только скоростью веника. Типовой веник 25М/s выдаст на ура. Значит 0.45/25=0,018 сек. Это медленно? А потом файл ещё будет закеширован виндой и работа с ним будет идти вообще как с памятью.

Тебе нужна какая скорость?



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

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

Наверх




Память: 0.5 MB
Время: 0.051 c
1-1121773434
msguns
2005-07-19 15:43
2005.08.07
События динамически создаваемых объектов


1-1121678132
granni
2005-07-18 13:15
2005.08.07
создание ресурсного файла


14-1121179495
Кастусик
2005-07-12 18:44
2005.08.07
Хелп. При отладке в Дельфи виснет ХР


1-1121670158
noname2
2005-07-18 11:02
2005.08.07
цикл


3-1119954763
pashtet
2005-06-28 14:32
2005.08.07
Компонент для выполнения скрипта БД.