我有一个文件正在用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);
您可以使用以下方法,该方法不会将整个文件加载到内存中(您可以使用它处理非常大的文件(,并允许在文件中的任何位置具有空行,而不仅仅是在末尾。
while (($line = fgets($file_handle)) !== false) {
if (($line != "'n") && ($line != "'r")) {
// line is correct, process it
}
}
此代码遍历每一行,然后检查该行是否不等于 'n
也不等于 'r
,如果不是这种情况,它将处理该行,否则它将以静默方式丢弃,代码将跳到下一行。
你也可以使用 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"
}
在性能方面,这可能不是最好的解决方案,但它绝对是最简单的,为了获得最后一行的更好方法,我向您推荐这个问题,该问题具有相当长且复杂的解决方案,如果您希望它们忽略空行,则需要修改。