Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Узнать кол-во строчек в файле как?

494
20 ноября 2002 года
Treolorn
30 / / 20.06.2000
Как можно узнать кол-во строчек в файле, но не извлекая его (файл) построчно и считая. Более быстрый способ есть?
546
21 ноября 2002 года
overlord
20 / / 20.02.2000
Цитата:
Originally posted by Treolorn
Как можно узнать кол-во строчек в файле, но не извлекая его (файл) построчно и считая. Более быстрый способ есть?



Ну извлекать их все равно прийдется, но можно воспользоваться стандартыми методами:
сoздаешь объект TListString *MyList,
делаешь MyList->LoadFromFile("xxx.hot"),
определяешь размер length=MyList->Count.

442
21 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Treolorn
Как можно узнать кол-во строчек в файле, но не извлекая его (файл) построчно и считая. Более быстрый способ есть?



Не хочешь извлекать построчно ?
Извлекай блоками в буфер и выполняй подсчет символов 10 и 13 - перевод каретки и возврат
(они идут парой)
Если тебя волнует скорость то насколько я помню в АСМе есть функции для операций со строками байтов в памяти...

При сохранении файла на диске у содержимого описывается общий размер но не количество строк...
может есть какая функция в библиотеках которая считает строки, но она все равно будет считывать весь файл.

494
21 ноября 2002 года
Treolorn
30 / / 20.06.2000
У меня есть файл в ~40000 строк (лог). Если я его обрабатываю (построчно), то это долго, но в тоже время если я его открываю (чтение, редактирование), допустим в FAR'е, то тот довольно быстро показывает кол-во строк.

Т.е. кроме как считывать построчно узнать кол-во строк никак нельзя? Памяти тоже очень жалко.
442
21 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Treolorn
У меня есть файл в ~40000 строк (лог). Если я его обрабатываю (построчно), то это долго, но в тоже время если я его открываю (чтение, редактирование), допустим в FAR'е, то тот довольно быстро показывает кол-во строк.

Т.е. кроме как считывать построчно узнать кол-во строк никак нельзя? Памяти тоже очень жалко.



Наверное я тупо объяснил если ты опять спрашиваешь :-(

Если ты действительно читаешь из файла по строкам то это тормоза жуткие... уж не знаю чем ты это делаешь (хоть бы код привел что ли...)
но при каждой операции считывания с диска читается минимум сектор это 512 байт... если ты делаешь эту операцию только ради чтения одной строки которая к примеру у тебя в среднем 50 байт то ты уже снижаешь потенциальную скорость своей программы в 10 раз ... В виндовз обычно кластера состоят из нескольких секторов и получается что если ты считываешь из файла по строкам то тормозишь свою прогу в сотни раз...
к примеру минута у тебя превращается в часы...
из файла нужно читать в буфер в оперативке
например его размер 4 килобайта минимум и уже потом в этом буфере считай строки... потом в этот же буфер считывай следующую часть файла в 4 килобайта снова считай строки и т.д.
но сначала проверь в описаниях стандартных функций C++ для работы с файлами, может какая из них это и умеет...

476
21 ноября 2002 года
man2002ua
218 / / 16.10.2002
еще один вариант для ускорения поиска - открыть файл с помощью CreateFileMapping/MapViewOfFile - получаем адрес начала файла, спроецированного в память процесса и работаем, как с обычной областью памяти - ищем 0x0D 0x0A, как сказал HexoGenius
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог