簡體   English   中英

為什么這樣打印最后一行? (SplFileObject)

[英]Why does this print the last line? (SplFileObject)

$file1 = new \SplFileObject('some file');
while( !$file1->eof() ){
    $data = $file1->fgets();
    if( !$file1->eof() ){
       echo $data;
    }
}

fgets()不會跳到文件的下一行嗎? 如果是這樣,為什么文件仍然傳遞第二個$ file1-> eof()語句? 這也與-> valid()一起發生。

feof / SplFileObject :: eof測試文件句柄/流是否在EOF位置。
您的源文件在最后一條數據行之后有一個換行符,並且fgets()停在那里。 但是,在最后一次讀取操作之后,EOF位置象征性地講了一個位置。 因此,下一個fgets()(以及隨后的read())將返回0字節, 然后文件才位於EOF位置,feof()將返回true。
在您的具體示例(nasdaqlisted.txt)中,僅測試$ data是否===''而不是$ file1-> eof()可能就足夠了,因為該文件中似乎沒有其他空行。

您每次循環運行時都會覆蓋$data 試試這個: $data .= $file1->fgets();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM