Количество строк в файле

Sir_J

Guest
Количество строк в файле

SubjSubj
Меня интересует самый быстрый алгоритм .
У кого какие варианты ?
 

Profic

just Profic (PHP5 BetaTeam)
1) Для того, чтобы узнать кол-во строк файл нужно прочитать
самое изящное решение (ИМХО)
$linesno = sizeof (file ('filename'));

оно, возможно и самое быстрое, т.к.
1) file в считывании файлов построчно довольно быстрый (http://php.spb.ru/php/speed.html#file)
2) sizeof тоже быстра (см там же)

Это моё ИМХО
 

Ваня-Ваня

Guest
Спасибо говорить не за что - профик глупость сказал.
имхо имхом, но думать тоже надо?

самое быстрое - это, я думаю, через систем запустить какую-нибудь утилиту, grep какой-нибудь

Если же средствами пхп, то считать файл целиком и substr_count
 

Sir_J

Guest
Я тут потестил все выше сказанное с помощью microtime().
Самым быстрым оказался sizeof(file('file.txt')).
так что Ваня не прав ты .
to Profic спасибо еще раз :)
 

Ваня-Ваня

Guest
о, господи.
ты и тестировать не умеешь.
сделай файл размером хотя бы в мегабайт.
и убедитсь.

и запомни на всю жизнь, что если выбирать между работой с массивами и без массивов, то надо выбирать второе.

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

Сир, не уподобляйся глупцам.
 

Ваня-Ваня

Guest
если поиском пользоваться не умеешь.
а я больше сюда писать не буду.
мне хватило топика за 100 постов размером, где один идиот упрямо утверждал то же, что и ты, и не хотел рахзуть глаза и видеть факты
 

Ваня-Ваня

Guest
одно только дополнение.
если ты считаешь, что способы, которые перечислены в статье - это все, какими можно считать файл в переменную, то ты ошибаешься.
[m]fread[/m]
[m]substr_count[/m]

о результатах доложить

Да,
Я тут потестил все выше сказанное
я 100% уверен, что через систем ты не тестил.
а зря. и не тестил зря, и соврал зря
 

Sir_J

Guest
to Ваня-Ваня приношу свои извинения
Значит дела обстоят так на небольших файлах где то
до 1000 строк быстрее работает sizeof(file('file.txt'))
а на файлах > 1000 строк быстрее работает grep
Все топик можно закрывать
 

Sir_J

Guest
to Ваня-Ваня тестил через exec
я не врал ! .
Откуда такая уверенность ?
 

Ваня-Ваня

Guest
Рано еще топик закрывать.
во- первых, ты не обратил внимания на то, что я тебе написал про массивы.
во-вторых, на этом форуме не закрывают топики - и правильно делают. Не ты у нас один такой самородок. Иногда попадаются даже такие, которые умеют пользоваться поиском...
 

Ваня-Ваня

Guest
Sir_J, ну, извиняюсь.
безапелляционность - от твоей бездоказательности.
ни параметров теста, ни тестовых кодов, ни результатов ты тут не привел.
осталось только догадываться.

тем более, что самый быстрый из кроссплатформенных вариантов ты так и не привел.
 

Sir_J

Guest
безапелляционность - от твоей бездоказательности.
Попробуй сам и убедишься :)
А кода 3 строчки чего его приводить
mocrotime()
// здесь считаем кол-во строк
mocrotime()
вот и все
 

Ваня-Ваня

Guest
к твоему сведению, я пробовал, и не раз.
и приводил здесь, на форуме все, о чем написал.
а вот ты так и не написал ничего
и тебе нельзя сказать, где ты ошибся - вот приходится догадываться.
что я и делаю.
мало ли - ты греп неправильно применяешь?
или я так до сих пор и не получил ответа - делал ли ты так, как я тебе сказал.
это тем более интересно, если греп по твоим словам, на каком- то этапе проигрывает самому тормозному - файлу.

хотя файл на 1000 строк, т. е, килобайт 10-20, - это настолько мизерный объем, что тут уже вступают в силу погрешности.
 

Profic

just Profic (PHP5 BetaTeam)
имхо имхом, но думать тоже надо?
хотя бы в мегабайт
1) Думаем. Когда надо :) Файлики размером хотя бы в мегабайт (да какой-там мегабайт, метров 50 бывает), естественно, читаем fread-ом. И обрабатываем их еще к тому же. Никогда не приходилось просто посчитать кол-во строк.
2) Да и про хотя бы приблизительный размер файла не было ни слова.
3) file на маленьких файлах быстрее, т.к. это ОДНА функция, реализованная на C, но выделяющая память под содержимое. fread c substr_count на больших файлах быстрее, т.к. это уже ДВЕ функции (но их там больше), но память выделяется только под буфер, на чем и выигрывает этот вариант...
 

Ваня-Ваня

Guest
и запомни на всю жизнь, что если выбирать между работой с массивами и без массивов, то надо выбирать второе.
тебя это тоже касается.

по поводу количества функций я даже спорить не буду.
очевидно, скорость выполнения, и количество операций, выполняемых одной функцией - это некая константа.
одна функция выполняется фиксированный промежуток времени.
Браво.
молодец, продолжай думать так же.
 

Profic

just Profic (PHP5 BetaTeam)
Ваня-Ваня: тормозимс? :)
Имелось ввиду совсем не то. Акцентируя внимание на кол-ве функций, я имел ввиду накладные расходы на цикл и вызов функций. Всё. Ничего больше.
 

Sir_J

Guest
Кстати Ваня-Ваня по результатам моих тестов
wc -l работает быстрее чем grep -с вот так то :)
 
Сверху