Как узнать число строк в файле на Perl? Неужели у такого мощного языка работы с текстом нет такой функции, (даже в PHP это делается одной функцией), не прибегая к полному считыванию файла в массив @content=<F> а далее число строк = $#content + 1;Никакой памяти не хватит при работе с большими файлами.
>Как узнать число строк в файле на Perl? Неужели у такого мощного языка работы с текстом нет такой функции, (даже в PHP это делается одной функцией), не прибегая к полному считыванию файла в массив @content=<F> а далее число строк = $#content + 1;
>
>Никакой памяти не хватит при работе с большими файлами.
а вы представляете как вообще происходит работа с файлами?
количество строк вы можете посчитать только когда просмотрите весь файл и посчитаете количество символов перевода строки [\r\n]
>Как узнать число строк в файле на Perl? Неужели у такого мощного языка работы с текстом нет такой функции, (даже в PHP это делается одной функцией), не прибегая к полному считыванию файла в массив @content=<F> а далее число строк = $#content + 1;
>
>Никакой памяти не хватит при работе с большими файлами.
а сис.вызов не поможет?my $lines = `wc -l $filename`;
$lines =~ s/[^0-9]//g;Для пояснения:
$ wc -l /etc/rc.conf
36 /etc/rc.conf$ cat /etc/rc.conf | wc -l
36
Вот С*ка, не знал про команду wc - а ведь вещь хорошая. Спасибо seller за ответ! Конечно сис вызов поможет!
>Никакой памяти не хватит при работе с большими файлами.а зачем читать в массив, чтобы узнать количество строк? Вам, как уже было сказано, нужно посчитать количество символов "\n".
open(FILE, "< any.txt") or die($!);
$lines_count++ while <FILE>;
close(FILE);
print $lines_count, "\n";если напрягает расход памяти и есть жутко длинные строки можно воспользоваться sysread. В кукбуке утверждается, что самое быстрое решение выглядит так:
$count += tr/\n/\n/ while sysread(FILE, $_, 2**20); # 2**20 - читает кусками по 1Мб
Опять же, как сказано выше, `wc -l`
($lines_count) = split(/\s+/, `wc -l $filename`);