使用PHP从文本文件的最后一行提取数据

使用PHP从文本文件的最后一行提取数据,php,file,text,Php,File,Text,我试图从文本文件的最后一行提取特定的数据位,以便能够自己显示它。例如,我想从以下文件中提取降雨数据: #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

我试图从文本文件的最后一行提取特定的数据位,以便能够自己显示它。例如,我想从以下文件中提取降雨数据:

#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位数。由于文件是远程的,并且在文件底部添加了新行,所以我只需要最后一行

有人能帮忙吗?我已经为此绞尽脑汁好几天了

$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]);

请参阅和

如果文件不太大或接近一行,则通常使用一行程序完成:

vprintf(
    'Rainfall prediced now: %4$smm'
    , explode(' ', end((
        file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
    )))
);
如果输入格式更复杂,还可以使用或来解析最后一行

编写文件时进行编辑如果文件很小,还可以将其加载到字符串(
file\u get\u 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"

如果您使用基于UNIX的系统,请考虑使用该命令。

$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); 
如前所述,这不会将整个文件加载到内存中,而且速度很快


希望这有帮助

在提出一个新问题之前,请务必使用搜索,重复的问题还有这个问题。请在建议的远亲主题之前仔细阅读我的问题。我已经搜索过了,没有人告诉我如何从一行中的某个位置到一行中的某个位置选择文本。由于数据总是会改变,我假设我必须选择一段线路。例如,我无法将数据与if语句进行匹配,因为数据从来都不相同。那么请务必阅读我上面指出的两个链接,它们回答了您关于如何获取最后一行的问题。一旦知道如何获取最后一行,就需要分解变量了。@user2700686:请在这里进行更公平的判断。你问的是两件事,通常你只问一件事。因此,当两个非常常见的事情都建议只使用一个副本时,请不要抱怨。对于另一个常见的问题-如何解析字符串-也存在重复项。所以,最好把你的问题保持在某一点上,否则评论和答案就会消失。这不是重复。也许是密切相关的。重复,没有。我在这里得到了我的答案,为什么我没有在其他线程中得到它?我可以理解你的观点,但是,我解释了为什么你很高兴在你的复制枪上扳动复制的扳机,我完全可以理解它是许多网站的一个模组,但在这个例子中,你错了。多亏了哈克雷,我现在有了答案。所以,谢谢和再见:)文件通常不会超过700行,所以可以立即加载。谢谢你,哈克雷,你做得很好。现在,我可以花更多的时间更有效地处理这件小事了!再次感谢您!PS这是第一个对我有用的代码片段。您好,我尝试了第二个代码,得到了这个“stream不支持在/public\u html/中搜索”。我现在将尝试第一个代码。谢谢您,我已经使用了Hakres解决方案,但看起来这也能很好地完成这项工作。再次感谢。