![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Количество строк
FANAT © (2005-05-30 07:17:00)Или такого нет.... или я забыл....
как подсчитать количество строк в текстовом файле и взять предпоследнюю строку?
BFG9k (2005-05-30 22:17:00) [1]radian :
Кажется борланд не рекомендует использовать старые паскалевские функции вроде read, write и т.д. Как насчет FileCreate (или CreateFile , не помню точно) , FileRead и FileWrite ?
raidan (2005-05-30 22:10:00) [2]Не, старый добрый blockread (8192) на слабеньком П3-500 всех уел :)
С четырехкратным превосходством над ReadLn на файлике в 52 метра (строка от 1 до 100 символов рандомом) и двукратным на файлике в 210 метров (строка 19 символов длиной всегда)...
BFG9k (2005-05-30 21:50:00) [3]
> Anatoly Podgoretsky © (30.05.05 20:01) [18]
> BFG9k © (30.05.05 18:51) [17]
> Правильно, поскольку оправдываться нужно тебе.
Обойдемся без демагогии. Между "считать" и "сосчитать" есть кое-какая разница.
raidan (2005-05-30 21:41:00) [4]>Чапаев © (30.05.05 21:23) [20]
С другой стороны, нужно попробовать read'ом - читать посимвольно :)))
Ща поэкспериментирую...
Чапаев (2005-05-30 21:23:00) [5]> Я б его blockread'ом ел и парсил бы на количество #13#10 :)
Причём читал бы с конца блоками по 512..8192 байта.
raidan (2005-05-30 20:38:00) [6]Я б его blockread'ом ел и парсил бы на количество #13#10 :)
Anatoly Podgoretsky (2005-05-30 20:01:00) [7]BFG9k © (30.05.05 18:51) [17]
Правильно, поскольку оправдываться нужно тебе.
BFG9k (2005-05-30 18:51:00) [8]2 KilkennyCat :
> В принципе, и строки сосчитать так будет быстрее
Нет смысла оправдываться :)
KilkennyCat (2005-05-30 18:15:00) [9]
> [15] BFG9k © (30.05.05 17:17)
гениально. я имел ввиду нахождение предпоследней строки.
BFG9k (2005-05-30 17:17:00) [10]
> KilkennyCat © (30.05.05 13:38) [13]
>
> Логично. Просто просмотреть файл с конца до нужного перевода.
> В принципе, и строки сосчитать так будет быстрее. Только
> не методом ReadLn :))
Подсчет строк с конца файла по скорости равен (а возможно и медленнее) подсчету с начала. Для того чтобы сосчитать строки, нужно сосчитать ВСЕ символы перевода строк в файле. Для этого так или иначе придется читать файл целиком.
Alx2 (2005-05-30 13:44:00) [11]Да. Офигенная проблема...
KilkennyCat (2005-05-30 13:38:00) [12]
> [12] MBo © (30.05.05 13:27)
Логично. Просто просмотреть файл с конца до нужного перевода. В принципе, и строки сосчитать так будет быстрее. Только не методом ReadLn :))
MBo (2005-05-30 13:27:00) [13]маленький вопросик автору ветки - есть ли нужда считать строки?
Если задача состоит только в выделении предпоследней - то этого вообще-то не требуется...
TUser (2005-05-30 11:44:00) [14]Хм, действительно - убедился в ложности своих убеждений.
Alx2 (2005-05-30 10:16:00) [15]Anatoly Podgoretsky © (30.05.05 10:09) [9]
Нет, Анатолий. Спасибо. Я, возможно, и извращенец кое в чем. Но сие уже выходит за все границы :))
Anatoly Podgoretsky (2005-05-30 10:09:00) [16]Alx2 © (30.05.05 08:31) [6]
Лучше бы ты дождался, тогда наверно удивление было бы еще больше.
Предлагаю провести эксперимент, сделать файлик скажем из одного миллиона строк из одного символа и загрузить в TStringList при этом понаблюдать за расходом памяти. Только на всякий случай запасись валидолом.
Alx2 (2005-05-30 08:42:00) [17]TUser © (30.05.05 8:36) [7]
Но ведь убедиться самому недолго?
TUser (2005-05-30 08:36:00) [18]Чего-то не то проверял. На больших файлах TStringList как раз намного быстрее, а на маленьких файлах - разница практически незаметна
Alx2 (2005-05-30 08:31:00) [19]TUser © (30.05.05 7:41) [4]
Проверил на 700 Mb файле.
Вариант с Readln ~ 35 сек.
Вариант с TstringList не дождался - ждал более 15 мин.
Машина P4 1800 с 512 Mb RAM
На мелочи, действительно, TStringList быстрее на ~20-25% засчет чтения файла "целиком". Но ростом размера файла идет почти экспоненциальный спад производительности, когда места в памяти недостаточно.
И оно надо - все целиком в память?
Alx2 (2005-05-30 07:42:00) [20]>Rep © (30.05.05 07:30)
>TUser © (30.05.05 07:33)
Вот все мало вам тормозных программ :)