Как узнать количество строк в файле delphi
Как посчитать число строк в текстовом файле без внесения его в СтрингЛист или БуферОбмена.
Словом нужен счётчик для Gauge.
Для Gauge лучше использовать не количество строк/символов/абзацев/и т.д., а, имхо, размер файла. Отмапить в память, потом StrScan на CR в цикле и с подсчетом.Должно быть быстро.
Я в самом начале тоже так подумал и попробовал. но для моего случая
- такой вариант недопустим ввиду неправильности отражения хода процесса.
-юсртыхэю 24.01.06, 07:18
Должно быть быстро.
Низя в память, так как размер текстового файла до неприличия велик. боюсь апиемка сдохнет прежде чем засасёт всесь файл.
Ктомуже я в процедуре начисто отказался от использования буфера и СтрингЛиста. всё нужно делать находу.
Спасибо с Increment an ordinal variable (INC). я тоже уже так пробовал, результан меня неустроил.
Может просто криво написал.
Фигня полная получается.
-юсртыхэю 24.01.06, 07:59
Блин, . программу что я пишу расчитана на пень первый с максимум 32 метрами памяти. суть моих ухищрений сечёш. на таком железе может жить тока 95 или 98. А простой юзер незнает где и как, да и вообще что такое файл подкачки.
Ктомуже какой прок в прогамме если она тормозит и жрёт память и файл подкачки раздувает.
Мне лично такая прог-ма неустраевает соответственно и других. и это ничего что я пишу её на P4 - 3Ghz с 1Gb оперативки и с двумя SATA в RAID .
Ктомуже читай внимательно тему. причём сдесь SWAP-файл, я просил алгоритм или пример счётчика.
Попробуй этот вариант:
HFile := CreateFile(Pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil,
Для того,чтобы подсчитать количество строк в файле, придется его весь прочитать. Раз его нужно как-то обрабатывать, бессмысленно читать первый раз для подсчета строк, в второй - для обработки с индикацией прогресса.
Лучше поступить так - определить размер файла, и при считывании очередной строки для обработки определять относительную позицию. Псевдокод:
нашли FileLength
BytePos=0
цикл до конца файла
Прочитали строку S
BytePos=BytePos+Length(S)+2 // 2 - на CRLF
Progress=BytePos*100 div FileLength // в процентах
обработка строки
конец цикла
Попробуй этот вариант:
HFile := CreateFile(Pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil,
-юсртыхэю 24.01.06, 10:35
Для того,чтобы подсчитать количество строк в файле, придется его весь прочитать. Раз его нужно как-то обрабатывать, бессмысленно читать первый раз для подсчета строк, в второй - для обработки с индикацией прогресса.
Лучше поступить так - определить размер файла, и при считывании очередной строки для обработки определять относительную позицию. Псевдокод:
нашли FileLength
BytePos=0
цикл до конца файла
Прочитали строку S
BytePos=BytePos+Length(S)+2 // 2 - на CRLF
Progress=BytePos*100 div FileLength // в процентах
обработка строки
конец цикла
Алгоритм тебе был приведён выще а ты сказал что подвисает, а О.С., в таких случаях тогда нужно указывать и железо кампика. ктож знал.
Читайте также: