timothy: ermittlung der zeilenanzahl bei textdatenbanken

Beitrag lesen

Hi,

na dann möchte ich auch noch einen Beitrag leisten.
Wie immer aus dem "Perl Cookbook":

8.2. Counting Lines (or Paragraphs or Records) in a File
Problem
You need to compute the number of lines in a file.

Solution
Many systems have a wc program to count lines in a file:

$count = wc -l < $file;
die "wc failed: $?" if $?;
chomp($count);
You could also open the file and read line-by-line until the end, counting lines as you go:

open(FILE, "< $file") or die "can't open $file: $!";
$count++ while <FILE>;

$count now holds the number of lines read

Here's the fastest solution, assuming your line terminator really is "\n":

$count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 16);
Discussion
Although you can use -s $file to determine the file size in bytes, you generally cannot use it to derive a line count. See the Introduction to Chapter 9, Directories, for more on -s.

If you can't or don't want to call another program to do your dirty work, you can emulate wc by opening up and reading the file yourself:

open(FILE, "< $file") or die "can't open $file: $!";
$count++ while <FILE>;

$count now holds the number of lines read

Another way of writing this is:

open(FILE, "< $file") or die "can't open $file: $!";
for ($count=0; <FILE>; $count++) { }
If you're not reading from any other files, you don't need the $count variable in this case. The special variable $. holds the number of lines read since a filehandle was last explicitly closed:

1 while <FILE>;
$count = $.;
This reads all the records in the file and discards them.

To count paragraphs, set the global input record separator variable $/ to the empty string ("") before reading to make <> read a paragraph at a time.

$/ = '';            # enable paragraph mode for all reads
open(FILE, $file) or die "can't open $file: $!";
1 while <FILE>;
$para_count = $.;

Bye
Timothy