Форум: "Основная";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизКоличество строк Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c