Подсчет строк (абзацев, записей) в файле
Проблема
Требуется подсчитать количество строк в файле.
Решение
Во многих системах существует программа 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 = $.;
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|