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
> 
> 
>


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to