从DYNAMIC文本文件中提取_基本的PHP问题

时间:2011-03-31 03:17:25

标签: php file extract text-files

我正在尝试从txt文件中提取内容。此文件是动态的,因为每次执行循环时数据都会附加到它。 在这个循环内部依赖于我从逻辑中提取内容的逻辑,如下所示......

$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没有帮助(参考我上面的代码)......

我不知道为什么!!帮助需要尽快......

由于

2 个答案:

答案 0 :(得分:0)

不确定我是否正确,但您正在读取您在同一循环中附加的文件中的数据?

您编写的数据是否已添加到文件中的所有单独行?你可以查看file()命令,它会将每一行读入一个数组......然后你可以通过计算前一行中的行,然后是after情况,将array_slice()从数组中排出正确的行。

答案 1 :(得分:0)

如果您已在附加模式下打开文件,则man page for fseek会说:

如果以附加(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);

?>