-3

我想从文本文件 d.txt 中读取数据。然后创建 2 个新的文本文件,在单独的文件 e.txt 中写入偶数行,在另一个文件 o.txt 中写入奇数行。

 <?php
 $evenhandler = fopen("e.txt","w");        
 $oddhandler = fopen("o.txt","w");
 $handle = fopen('d.txt', 'r');
 while (!feof($handle))
   {
      $f=fgets($handle);
   fwrite($evenhandler,$f);
    }
  fclose($file); 

 ?>

实际上我不明白如何实现它,根据我的代码,屏幕上没有显示任何输出。

4

3 回答 3

4
<?php
 $evenhandler = fopen("e.txt","w");        
 $oddhandler = fopen("o.txt","w");
 $handle = fopen('d.txt', 'r');
 $i=0;
 while (!feof($handle))
   {
      $f=fgets($handle);
      if($i%2==0)
      {
        fwrite($evenhandler,$f);
      }
      else
      {
        fwrite($oddhandler,$f);
      }
    $i++;
  }
  fclose($handle); 
  fclose($evenhandler); 
  fclose($oddhandler); 
?>

性能提示:

您甚至可以进一步提高其性能(以防您的输入文件非常大)。您可以从$i的值为0 开始,然后在循环中检查它是否为 0,将其设置为 1,反之亦然。然后,如果您可以检查 i = 1 或 i =0 来做出决定。这样,您可以避免在每次传递中都使用模运算符并且仍然得到相同的结果

于 2012-12-30T12:04:04.223 回答
2

使用模数运算符%可以帮助您

 $outhandler[0] = fopen("e.txt","w");        
 $outhandler[1] = fopen("o.txt","w");
 $handle = fopen('d.txt', 'r');
 $linenum = 0;
 while (!feof($handle))
 {
    $f=fgets($handle);
    fwrite($outhandler[$linenum % 2],$f);
    $linenum++;
 }

fclose($handle);
fclose($outhandler[0]);
flcose($outhandler[1]);
于 2012-12-30T12:15:11.803 回答
0

嗨,这实际上很容易,你几乎已经做到了。您只需为偶数行和奇数行传递不同的 f.handler。

<?php
$evenhandler = fopen("e.txt","w");        
$oddhandler = fopen("o.txt","w");
$data = file('d.txt'); // this reads entire file and puts it into array, each line separate item
for($i=0;$i<count($data);$i++) {
  // Even shorter, if you put all this in only 1 line :)
  $fHandler = ($i%2==0)? $evenhandler:$oddhandler;
  fwrite($fHandler, $data[$i];
}
fclose($evenhandler); 
fclose($oddhandler);
?>
于 2012-12-30T12:09:50.460 回答