我试图从文本文件的最后一行中提取一些特定数据,以便能够自己显示它。例如,我想从以下文件中提取降雨数据:
#date #time #blah #rainfall #blah #blah
200813 1234 1234 0.5 1234 1234
200813 1235 1234 1.2 1234 1234
200813 1236 1234 3.5 1234 1234
200813 1237 1234 0.2 1234 1234
200813 1238 1234 0.1 1234 1234
我想在网页上以这种方式使用数据:
现在预测降雨量:0.1毫米
所以我需要的是最后一行的0.1数字。由于文件是远程的,并且在文件的底部添加了新行,我只需要最后一行。
有人可以帮忙,我已经绞尽脑汁待了好几天。
答案 0 :(得分:0)
$file = file('path/to/file');
$lastLine = end($file);
应该做你需要的。
或者,如果你是一个衬里的粉丝: -
$lastLine = end(file('path/to/file'));
假设您的文件名为'data.txt',这将输出您的预期降雨量: -
printf('Rainfall expected %smm', array_values(array_filter(explode(' ', end(file('data.txt')))))[3]);
答案 1 :(得分:0)
如果文件不是太大,或者接近一个文件,通常使用一行代码:
vprintf(
'Rainfall prediced now: %4$smm'
, explode(' ', end((
file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
)))
);
如果输入格式更复杂,也可以使用sscanf
或preg_match
来解析最后一行。
编辑在编写文件很小的时候,您也可以将其加载到字符串(file_get_contents
)中并从后面解析该字符串:
$buffer = '#date #time #blah #rainfall #blah #blah
200813 1234 1234 0.5 1234 1234
200813 1235 1234 1.2 1234 1234
200813 1236 1234 3.5 1234 1234
200813 1237 1234 0.2 1234 1234
200813 1238 1234 0.1 1234 1234';
preg_match('/([^ ]+)\s+\d+\s+\d+\R?$/', $buffer, $matches)
&& vprintf('Rainfall prediced now: %2$smm', $matches);
// prints "Rainfall prediced now: 0.1mm"
答案 2 :(得分:0)
如果您使用的是基于Unix的系统,请考虑使用tail
命令。
$file = escapeshellarg($file);
$line = `tail -n 1 $file`;
以下内容也适用:
$fp = fopen('file.txt', 'r');
$pos = -1; $line = ''; $c = '';
do {
$line = $c . $line;
fseek($fp, $pos--, SEEK_END);
$c = fgetc($fp);
} while ($c != PHP_EOL);
echo $line; //last line
fclose($fp);
如上所述here,这不会将整个文件加载到内存中,而且速度很快。
希望这有帮助!