获取文件的最后一行,忽略空行或空格

时间:2014-12-11 23:33:22

标签: php

我有一个用PHP解析的文件。似乎文件的内容显然以空白的新行结尾,有时带有空格。我该如何修剪它并获得真正的最后一行?

我的文件有时看起来像

Line 1
Line 2
File content are here 
\n

Line 1
Line 2
File content are here 
\r

或有时是正确的方式

Line 1
Line 2
File content are here 

我需要我的脚本来解析文件的末尾并返回真正的最后一行,即"文件内容在这里" (或者其他任何东西,都不是空白)。

我正在使用下面这一行尝试获取最后一行。问题是,我不总是知道X是什么。即使我认为我知道,文件末尾的换行符和空行也会让我失望。

fseek($file_handle, -X, SEEK_END);

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法,它不会将整个文件加载到内存中(您可以使用它处理非常大的文件)并允许在文件中的任何位置放置空行,而不是仅在结尾处。 / p>

while (($line = fgets($file_handle)) !== false) {
    if (($line != "\n") && ($line != "\r")) {
        // line is correct, process it
    }
}

此代码遍历每一行,然后检查该行是否等于\n\r,如果不是它处理该行的情况,否则它&& #39; s默默地丢弃,代码跳到下一行。

您还可以使用PHP 5.1.0中引入的新SplFileObject接口,代码非常相似并且工作方式相同:

$file = new SplFileObject("file.txt");

while (!$file->eof()) {
    $line = $file->fgets();
    if (($line != "\n") && ($line != "\r")) {
        // line is correct, process it
    }
}

此外,我忽略了你只需要我答案第一次修订中的最后一行;一个简单的解决方案是在循环中定义一个变量,如果行是正确的(而不是空的/垃圾的),如果有行之后该变量将被覆盖,但它将保持在最后一行,你可以用它做任何你想做的事。

while (($line = fgets($file_handle)) !== false) {
    if (($line != "\n") && ($line != "\r")) {
        $last = $line
    }
}

if (isset($last)) {
    echo "you've got your last line"
}

这可能不是性能方面的最佳解决方案,但它绝对是最简单的方法,因为有更好的方法可以获得最后一行,我将您推荐给this question,这些解决方案需要相当长而复杂的解决方案修改,如果你想让它们忽略空行。