我有一个用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);
答案 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,这些解决方案需要相当长而复杂的解决方案修改,如果你想让它们忽略空行。