18.6. Counting Lines, Paragraphs, or Records in a File
Problem
You want to count the number of lines, paragraphs, or records in a file.
Solution
To count lines, use fgets( )
.
Because it reads a line at a time, you can count the number of times
it’s called before reaching the end of a file:
$lines = 0;
if ($fh = fopen('orders.txt','r')) {
while (! feof($fh)) {
if (fgets($fh,1048576)) {
$lines++;
}
}
}
print $lines;To count paragraphs, increment the counter only when you read a blank line:
$paragraphs = 0;
if ($fh = fopen('great-american-novel.txt','r')) {
while (! feof($fh)) {
$s = fgets($fh,1048576);
if (("\n" == $s) || ("\r\n" == $s)) {
$paragraphs++;
}
}
}
print $paragraphs;To count records, increment the counter only when the line read contains just the record separator and whitespace:
$records = 0;
$record_separator = '--end--';
if ($fh = fopen('great-american-novel.txt','r')) {
while (! feof($fh)) {
$s = rtrim(fgets($fh,1048576));
if ($s == $record_separator) {
$records++;
}
}
}
print $records;Discussion
In the line counter, $lines is incremented only if
fgets( ) returns a true value. As fgets( ) moves through the file, it returns each line it
retrieves. When it reaches the last line, it returns
false, so $lines
doesn’t get incorrectly incremented. Because EOF has
been reached on the file, feof( )
returns
true, and the while loop ends.
This paragraph counter works fine on simple text but may produce unexpected results when presented with a long string of blank lines or a file ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access