PHP - 从文本文件的末尾读取

3
我���一个以逗号分隔的数值文本文件。
例如:
1299491735618,10,84,10,121.6,10,120.0,12994917389996,12, 13, 14, 15, and so on ..

现在,我只需要读取最后一个“set”数据,即从12994917389996,12,13,14,15等开始...

在这种情况下,我猜12994917389996大于130,其他值小于130。所以,我需要从12994917389996读取到文件结尾...
希望你明白了!
编辑1:不是,它是一个动态文本文件,不断更新,每次我只需要读取最后一组数据!
编辑2:我的代码
<?php
$file = fopen('graph.txt', 'r') or die("can't open file");

if ($file) {
    while (!feof($file)) {
        $line = trim(fgets($file));
        if (strlen($line)) {
            $fields = explode(",", $line);
            $num = count($fields);
            for ($i = 0; $i < $num; $i++) {
                $keyval[$i] = $fields[$i];
                if ($i == 0) {
                    $keyval['x'][] = $fields[$i];
                    echo $keyval['x'][0];
                }
                else {
                    if ($i % 2 == 0) $keyval['y'][] = $fields[$i];
                    else $keyval['y1'][] = $fields[$i];
                }
            }
        }
    }
}

fclose($file);
?>  

在这里,我使用 $keyval[x][] 来存储巨大的 xxxxxxxxxxxxx 值,使用 keyval[y][] 和 keyval[y1][] 来存储在该巨大值之后交替出现的值.... 这应该可以澄清一切!
2个回答

1

抱歉,我不确定我理解了......您想获取第一个大于130的数之后的所有数字,除了第一个数字?这太复杂了:D

这样如何?

$str = "1299491735618,10,84,10,121.6,10,120.0,12994917389996,12,13,14,15,16,17";

$arr = explode(',', $str);

$i = 1;
while ($i < count($arr) && floatval($arr[$i]) < 130)
  $i++;

print_r(array_slice($arr, $i));

输出:

Array
(
    [0] => 12994917389996
    [1] => 12
    [2] => 13
    [3] => 14
    [4] => 15
    [5] => 16
    [6] => 17
)

重点是我需要从文件的末尾读取...而不是从开头! - Zac

0

希望这能有所帮助。

$ echo '1299491735618,10,84,10,121.6,10,120.0,12994917389996,12, 13, 14, 15'  > file
$ php -a
php > $fp = fopen('/path/to/file', 'r');
php > fseek($fp, 38);
php > echo fgets($fp);
12994917389996,12, 13, 14, 15

如果不是的话,你能更具体地说明文件中存储的数据结构吗?

嗨,文件就像我提到的那样...1299491735618,10,84,10,121.6,10,120.0(等等...),12994917389996,12,13,14,15等等... 我只需要读取最后一组数据! - Zac
你的数据结构定义良好吗?我的意思是,你能否说明你需要文件的最后30个字节,或者这个数字可能会有所变化?它是否总是XXXXXXXXXX,XX,XX.X,XX,XX,或者你的数据结构可能与此模式不同?通过不读取整个文件,您可以节省一些处理器时间和内存。在这种情况下,您只需打开它,寻找最后30个字节,读取并关闭文件(我上面提供的方法)。您可以从末尾获取文件大小减去30个字节,并寻找此数字(第二个fseek函数参数)。 - Nemoden
你说得对,但是这个文件是动态的,值不断地添加到其中...我只需要读取最后一组数据...我唯一能够辨别的结构就是...xxxxxxxxxxx的值肯定大于130,而其他值都小于130...所以我需要从文件末尾开始读取,直到找到大于130的值...因此,输出就像你提到的那样...它需要是动态的。 - Zac
我已经添加了我的代码,请建议修改!谢谢 - Zac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接