Re: fgets question
| From: | Monte Ohrt | Date: | Wed, 14 Aug 2002 19:12:26 +0000 |
| Subject: | Re: fgets question | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-112582@lists.php.net to get a copy of this message | ||
I don't have the option of editing the text files to work right. I want to be able to read an arbitrary text file line by line and process each one. So I suppose I could do this (?)
<?php
$fd = fopen ("test","r");
while (!feof ($fd)) {
$buffer = fgets($fd, 4096);
if($buffer == '') {
// no \n, must be EOF
break;
}
echo "buffer is $buffer";
}
fclose ($fd);
?>
DL Neil wrote:
Hi Monte,Hi, I have a question about fgets(), it seems to pick up an extra line at the end of a text file....8\n...Here is the output (showing newlines as \n): buffer is 1\n buffer is 2\n buffer is 3\n buffer is 4\n buffer is 5\n buffer is 6\n buffer is 7\n buffer is 8\n buffer is My question, why is there an extra line? Or in other words, how do I get this to loop exactly 8 times if there are only 8 lines?The answer is that there isn't an 'extra' line, there are as many as you put/PHP reads! The question to ask is: how does a stream file end? Answer: with an EOF character (not an LF). Lines in a (*nix) stream file are separated by LF or \n character, therefore there is a ninth 'line' (of absolutely nothing) between the last LF and the EOF. Take out that last \n and things should work the way you want. Regards, =dn