Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1121836615
Elena_
2005-07-20 09:16
2005.08.07
Как найти корень или подкорень TreeView по значению data


1-1121981919
Тестер1
2005-07-22 01:38
2005.08.07
С чем может быть связан Виолэйшен Акссэс в ScreenToClient ?


14-1121268154
Kerk
2005-07-13 19:22
2005.08.07
DIV element


6-1114645111
Павлов_
2005-04-28 03:38
2005.08.07
TCP сервер на неблок. сокетах


1-1121630007
able
2005-07-17 23:53
2005.08.07
Перехват положения окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский