FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » SplFileObject always returns an extra "last" line -- why?
Show: Today's Messages :: Unread Messages :: Polls :: Message Navigator
| Subscribe to topic | Bookmark topic 
Switch to threaded view of this topic Create a new topic Submit Reply
SplFileObject always returns an extra "last" line -- why? [message #186318] Tue, 24 June 2014 10:09 Go to next message
kurtk(at)pobox(dot)com is currently offline  kurtk(at)pobox(dot)com
Messages: 10
Registered: May 2012
Karma: 0
Junior Member
add to buddy list
ignore all messages by this user
Why does SplFileObject always seems to return an extraneous, final empty string as an extra last line of file.

If I have a file with only one line of text and run this code

try {
$file = new SplFileObject("./one.txt");

} catch (Exception $e) {
echo $e->getMessage() . "\n";
}

foreach($file as $line_no => $contents) {

echo "line number " . $line_no . " is: " . $contents;

}

I get two lines of output:
line number 0 is: one
line number 1 is:

The file one has one line of text, the word "one". I'm running this on Linux Mint 17 with PHP 5.5.9.

Thanks
Re: SplFileObject always returns an extra "last" line -- why? [message #186319 is a reply to message #186318] Tue, 24 June 2014 10:22 Go to previous messageGo to next message
Christoph Michael Bec is currently offline  Christoph Michael Bec
Messages: 207
Registered: June 2013
Karma: 0
Senior Member
remove from buddy list
stop ignoring messages by this user
kurtk(at)pobox(dot)com wrote:

> Why does SplFileObject always seems to return an extraneous, final
> empty string as an extra last line of file.
>
> If I have a file with only one line of text and run this code
>
> try {
> $file = new SplFileObject("./one.txt");
>
> } catch (Exception $e) {
> echo $e->getMessage() . "\n";
> }
>
> foreach($file as $line_no => $contents) {
>
> echo "line number " . $line_no . " is: " . $contents;
>
> }
>
> I get two lines of output:
> line number 0 is: one
> line number 1 is:
>
> The file one has one line of text, the word "one". I'm running this
> on Linux Mint 17 with PHP 5.5.9.

Actually the file has two lines, because you're having a line break (NL,
CR or CRLF) after the word "one", I assume. Either remove this line
break, or set appropriate flags for $file:

$file->setFlags(
SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY
);

See <http://www.php.net/manual/en/splfileobject.setflags.php>.

--
Christoph M. Becker
Re: SplFileObject always returns an extra "last" line -- why? [message #186325 is a reply to message #186319] Tue, 24 June 2014 21:14 Go to previous message
kurtk(at)pobox(dot)com is currently offline  kurtk(at)pobox(dot)com
Messages: 10
Registered: May 2012
Karma: 0
Junior Member
add to buddy list
ignore all messages by this user
> Actually the file has two lines, because you're having a line break (NL,
> CR or CRLF) after the word "one", I assume. Either remove this line
> break, or set appropriate flags for $file:
>
> $file->setFlags(
> SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY
> );

Thanks Christoph! That worked. Now I know how to set the flags to get the behaviour I need.
Quick Reply
Formatting Tools:   
  Switch to threaded view of this topic Create a new topic
Previous Topic: Putting it all together
Next Topic: encoding
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Thu Feb 13 09:56:42 EST 2025

Total time taken to generate the page: 0.04988 seconds