2011-04-18 133 views
3

我有一個用逗號分隔的值的文本文件。PHP - 從文本文件末尾讀取

例子:

1299491735618,10,84,10,121.6,10,120.0,12994917389996,12, 13, 14, 15, and so on .. 

現在,我僅需要讀取數據的最後一個「設置」,即只能從12994917389996,12, 13, 14, 15, and so on ...

在這種情況下,我想12994917389996大於130個其他值小於130.所以,我需要讀取FROM 12994917389996到文件末尾...

希望你懂了!

編輯1:不,它是一個動態的文本文件,不斷更新,我只需要每次只讀取最後一組數據!

編輯2:MY代碼

<?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] []值後大巨人(xxxxxxxxxxxxx)價值....這應該澄清一切!

回答

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 
) 
+0

重點是我需要從文件的結尾讀取...不是從第一個! – Zac 2011-04-18 03:30:05

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 

如果不是,您可以更具體地瞭解存儲在文件中的數據結構嗎?

+0

嗨文件就像我提到的... 1299491735618,10,84,10,121.6,10,120.0(依此類推......),12994917389996,12,13,14,15等等。我只需要閱讀最後一組數據! – Zac 2011-04-18 03:27:41

+0

您的數據結構是否定義良好?我的意思是,你可以說你需要最後30個字節的文件或這個數字可能會有所不同嗎?它會始終是XXXXXXXXXX,XX,XX.X,XX,XX還是您的數據結構可能與此模式不同?通過不讀取整個文件,可以節省一些處理器時間和內存。在這種情況下,你只需打開它,尋找最後30個字節,閱讀並關閉你的文件(我上面提供的方法)。你可以從最後得到文件大小減去30個字節並尋找這個數字(第二個fseek函數參數) – Nemoden 2011-04-18 03:35:28

+0

你說得對,但是這個文件是動態的,值不斷追加到它......我需要的只是讀取最後一組數據。 ..唯一的結構我可以辨別的是,.. xxxxxxxxxxx值肯定大於130,其他值小於130 .. si我需要從文件的END讀取,TILL的值大於130。 ..所以,輸出就像你提到的..它需要動態 – Zac 2011-04-18 03:45:51