![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Количество строк [D5, Win95/98, WinME, NT4, Win2k, WinXP]
UK-AAV © (2005-07-20 22:31:00)В программе требуется часто считать кол-во строк в текстовом файле при этом важна скорость. Файл примерно состоит из последовательности строк
1) макс 420 символов
2) 12 символов
3) 16 символов
всего строк около 1000.
MegaVolt (2005-07-21 11:39:00) [1]А кто изменяет этот файл? Внешняя программа а ты должен его анализировать в реальном времени?
Я так понимаю весь файл 450000 кило. Время анализа будет ограниченно только скоростью веника. Типовой веник 25М/s выдаст на ура. Значит 0.45/25=0,018 сек. Это медленно? А потом файл ещё будет закеширован виндой и работа с ним будет идти вообще как с памятью.
Тебе нужна какая скорость?
Alx2 (2005-07-21 10:44:00) [2]UK-AAV (21.07.05 10:17) [13]
> первые строки всегда разной длинны
Одинаковость и не требуется
>если FileSize начал отличаться..
Имхо, самое оптимальное, если история этих изменений FileSize хранится.
isasa (2005-07-21 10:32:00) [3]1.Следить за изменением файла.
2.Читать в память низкоуровневыми IO ф-циями типа BlockRead.
3. а потом хоть
Count:=0;
for i:=BuffLen downto 0 do if Buff[i]=#$0A then inc(Count);
UK-AAV (2005-07-21 10:17:00) [4]To Alx2
первые строки всегда разной длинны
Наверное сделаю по совету evvcom. Только в моем случае будет проще, если FileSize начал отличаться, то кол-во строк точно увеличевается на 3.
всем спасибо
Anatoly Podgoretsky (2005-07-21 09:03:00) [5]Пусть сначала ответит на 5 и 10
Alx2 (2005-07-21 09:01:00) [6]UK-AAV (20.07.05 22:31)
Memory Mapped File + количество концов строк
Anatoly Podgoretsky (2005-07-21 08:53:00) [7]UK-AAV (21.07.05 08:32) [7]
Следует ли понимать, что все строки строго такой структуры и размера? Тогда FileSize / n
evvcom (2005-07-21 08:46:00) [8]
> В программе требуется часто считать кол-во строк в текстовом
> файле при этом важна скорость.
У меня была подобная задача. Самым быстрым способом я посчитал анализ файла с созданием своеобразного файла индексов. В нем записывается дата/время изменения txt-файла, его длина (для определения факта его изменения), признак валидности файла, а дальше количества и смещения начал строк. Естественно твой инд.файл должен быть по максимуму адаптирован под твой txt-файл.
Джо (2005-07-21 08:41:00) [9]
> а если файл для этого загружать как file of string?
Судя по твоему описанию, он никак не является file of string. Кроме того, в данной декларации можно использовать только ShortString - явно или неявно.
UK-AAV (2005-07-21 08:32:00) [10]to kull
Файле лежит инфа:
строка с текстом(макс 420 символов
строка данных 12
строка данных 16
строка с текстом(макс 420 символов
строка данных 12
строка данных 16
.............
а если файл для этого загружать как file of string?
Германн (2005-07-21 02:00:00) [11]2 UK-AAV (20.07.05 22:48) [2]
Может быть стоит читать сначала весьфайл как бинарный, а послеискать в нем "количество переводов строк"?
Anatoly Podgoretsky (2005-07-21 00:09:00) [12]UK-AAV (20.07.05 22:31)
В данном случае хорошо подойдет TStringList
kull (2005-07-20 23:39:00) [13]А поподробнее про формат файла можно, или он "примерный"? :)
ferr (2005-07-20 23:24:00) [14]
> UK-AAV (20.07.05 22:48) [2] [Новое
> сообщение][Ответить]
Вы что-то ещё можете предложить?
UK-AAV (2005-07-20 22:48:00) [15]это понятно, но вопрос возник из-за скорости. на медленных компах(pentium 166) частое перечитывание всех байтов очень тормозит. Отсюда и вопрос.
Kerk (2005-07-20 22:45:00) [16]Можно считывать побайтно или повордно и считать кол-во переводов строки.