Подсчет строк (абзацев, записей) в файле

Проблема

Требуется подсчитать количество строк в файле.

Решение

Во многих системах существует программа wc, подсчитывающая строки в файле:
$count = 'wc -l < $file';
die "wc failed: $?" if $?;
chomp($count);
Кроме того, можно открыть файл и последовательно читать строки до конца, увеличивая значение счетчика:
open(FILE, "< $file") or die "can't open $file: $!";
$count++ while <FILE>;
# $count содержит число прочитанных строк
Самое быстрое решение предполагает, что строки действительно завершаются "\n":
$count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 16);

Комментарий

Хотя размер файла в байтах можно определить с помощью -s $file, обычно полученная цифра никак не связана с количеством строк.
Если вы не хотите или не можете перепоручить черную работу другой программе, имитируйте работу wc — самостоятельно откройте и прочитайте файл:
open(FILE, "< $file") or die "can't open $file: $!";
$count++ while <FILE>;
# $count содержит число прочитанных строк
Другой вариант выглядит так:
open(FILE, "< $file") or die "can't open $file: $!";
for ($count=0; <FILE>; $count++) { }
Если вы не читаете из других файлов, можно обойтись без переменной $count. Специальная переменная $. содержит количество прочитанных строк с момента последнего явного вызова close для файлового манипулятора:
1 while <FILE>;
$count = $.;
В этом варианте все записи файла последовательно читаются без использования временных переменных.
Чтобы подсчитать абзацы, присвойте перед чтением глобальному разделителю входных записей $/ пустую строку (""), и тогда оператор <> будет считывать не строки, а целые абзацы:
$/='';          # Включить режим чтения абзацев
open(FILE, $file) or die "can't open $file: $!";
1 while <FILE>;
$para_count = $.;

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: