2011-03-31 65 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