2011-03-31 71 views
0

我正在嘗試從txt文件中提取內容。該文件是動態的,因爲每次執行循環時數據都會附加到它。 在這個循環中休息我從文件中提取內容的邏輯,如下...從動態文本文件中提取_基本PHP問題

$length = filesize($filename); 
fseek($fd,$previousLength); 
$contents = fread($fd,(($length - $previousLength))); 
$previousLength = $length; 

即,我想讀只得到了附加的數據,在過去的循環......,而不是數據這是以前寫的。 實例......一個txt加一次,每次循環運行..即考慮

114134, 144, 1443, 1433 ... 
(n of these written every once in loop) ... 

如果我讀的n值,說

114134, 144 ... 
在第一循環

...

下一次,我只需要閱讀

1443, 1443 and NOT 114134, 144 .... 

fread()在這裏失敗了,fseek沒有幫助( REF。我上面的代碼)...

我DON「T知道爲什麼!!幫助需要儘快..

感謝

回答

0

如果在追加模式打開的文件,則man page for fseek說:

如果你已經打開以附加文件(A或A +)模式,寫入文件的任何數據總是會被附加,不管文件位置,調用fseek()的結果將是未定義的。

以下代碼有一些修改。我的長度有一些問題--Fread確實需要它,但我決定使用fgets來避免它。這將停止在換行符上,但具有方便的功能,否則讀取文件的全部剩餘內容。這樣做可能有更好的方法,但這確實奏效。

<?php 
$filename = 'loopFile.txt'; 
$previousLength = 0; 
$n = 0; 

$fw = fopen($filename, 'a+'); 
$fr = fopen($filename, 'r'); 

for ($i=0; $i < 15; $i++) 
{ 
    // Put a random number of numbers into the file. 
    $numberOfNumbers = rand(0, 5); 

    for ($writeCount = 0; $writeCount < $numberOfNumbers; $writeCount++) 
    { 
     fwrite($fw, $i . '_' . $n++ . ', '); 
    } 

    fseek($fr, $previousLength); 
    $contents = fgets($fr); 

    if (!empty($contents)) 
    { 
     echo 'On iteration: ' . $i . ' read: ' . $contents . "\n"; 
    } 
    else 
    { 
     echo 'On iteration: ' . $i . ' no new data appended to file.' . "\n"; 
    } 

    $previousLength += strlen($contents); 
} 

fclose($fw); 
fclose($fr); 

?> 
+0

so?我的代碼錯了? – Zac 2011-03-31 04:05:13

+0

我將在一些可用的代碼中進行編輯。 – Paul 2011-03-31 04:17:47

0

不知道如果我得到這個權利,但你從文件中讀取數據那你在同一迴路追加?

是你寫的所有單獨的行添加到文件中的數據?你可以看一下該文件()命令來代替,它讀取每行到一個數組...你然後array_slice()可以通過前面的數組中的行數來排出陣列右邊的行,然後是後面的情況。

+0

「但是您正在從您在同一個循環中追加的文件讀取數據?」 - 是的。請看我提到的例子..寫入的數據由逗號分隔,我使用爆炸UNdelimiting ...這不是問題...問題是隻讀取附加數據而不是從再次...希望你明白了。 – Zac 2011-03-31 03:28:43

+0

@Zac是的,現在我明白了。我在你編輯你的問題之前發佈了這個。讓我想一想... – Jorg 2011-03-31 03:36:41