【问题标题】:PHP explode a txt filePHP炸一个txt文件
【发布时间】:2012-12-05 10:03:52
【问题描述】:

我有以下 txt 文件:

++结婚++M++B++NY++

++杰克++F++O++LS++

写入 .txt 文件:

姓名:结婚

性别:男

血型:B

城市:纽约

姓名:杰克

性别:F

血型:O

城市:LS

我的代码是:

$fn = fopen("test.txt","r") or die("fail to open file");
 
$content = array();
 
 while($row = fgets($fn)) {

    $num = explode("++", $row);
    $name = $num[0];
    $sex = $num[1];
    $blood =  $num[2];
    $city = $num[3];
 }

$fp = fopen('output.txt', 'w');     
fwrite($fp, $row);
fclose($fp);

这应该有效吗?因为它什么也不返回。

谢谢。

【问题讨论】:

  • 您解析文本文件,将其放入变量中,然后什么也不做。尝试转储 $num。
  • 你没有返回任何东西(或使用提取的变量)。

标签: php arrays fopen explode fgets


【解决方案1】:
$fn = fopen("test.txt","r") or die("fail to open file");

while($row = fgets($fn)) {
  list( $sName, $sSex, $sBlood, $sCity ) = explode( "++", $row );

  echo 'Name:' . $sName . '<br />';
  echo 'Sex:' . $sSex . '<br />';
  echo 'Blood type:' . $sBlood . '<br />';
  echo 'City:' . $sCity . '<br />';
}

fclose( $fn );

要写入文件,您必须先创建一个缓冲区,然后再写入文件。最简单的方法是使用 file_put_contents。请注意,file_put_content 方法比 fopen、fwrite 和 fclose 使用更多内存。

$fn = fopen("test.txt","r") or die("fail to open file");

$sBuffer = '';
while($row = fgets($fn)) {
    list( $sName, $sSex, $sBlood, $sCity ) = explode( "++", $row );

    $sBuffer .= 'Name:' . $sName . PHP_EOL;
    $sBuffer .= 'Sex:' . $sSex . PHP_EOL;
    $sBuffer .= 'Blood type:' . $sBlood . PHP_EOL;
    $sBuffer .= 'City:' . $sCity . PHP_EOL;

    $sBuffer .= PHP_EOL; // There will be a empty line after each "set"
}

fclose( $fn );

file_put_contents( 'path/to/file.txt', $sBuffer );

使用 fopen、fwrite 和 fopen。

$fn = fopen("test.txt","r") or die("fail to open file");

$rWrite = fopen( 'path/to/file.txt', 'w' ) or die( 'Could not open file for writing' );

while($row = fgets($fn)) {
    list( $sName, $sSex, $sBlood, $sCity ) = explode( "++", $row );

    fwrite( $rWrite, 'Name:' . $sName . PHP_EOL );
    fwrite( $rWrite, 'Sex:' . $sSex . PHP_EOL );
    fwrite( $rWrite, 'Blood type:' . $sBlood . PHP_EOL );
    fwrite( $rWrite, 'City:' . $sCity . PHP_EOL );

    fwrite( $rWrite, PHP_EOL ); // There will be a empty line after each "set"
}

fclose( $fn );
fclose( $rWrite );

【讨论】:

  • 如何写入 .txt 文件?
【解决方案2】:

它没有输出任何东西,因为您没有使用$name$sex 等。尝试在您的代码中更改以下 sn-p,看看它现在做了什么:

while($row = fgets($fn))
{

    $num = explode("++", $row);
    $name = $num[0];
    $sex = $num[1];
    $blood =  $num[2];
    $city = $num[3];

    echo "$name $sex $blood $city<br>";
 }

【讨论】:

    【解决方案3】:

    你几乎是在正确的方向。您需要在获取内容的同一循环中包含对文件的写入。

    $fn = fopen("test.txt","r") or die("fail to open file");
    
    $fp = fopen('output.txt', 'w') or die('fail to open output file');
    while($row = fgets($fn)) {
      $num = explode("++", $row);
      $name = $num[0];
      $sex = $num[1];
      $blood =  $num[2];
      $city = $num[3];
    
      fwrite($fp, "Name:$name\n");
      fwrite($fp, "Sex:$sex\n");
      fwrite($fp, "Blood:$blood\n");
      fwrite($fp, "City:$city\n");
    }
    fclose($fn);
    fclose($fp);
    

    您的初始代码将不起作用,因为 fwrite 需要一个字符串并且您正在传递一个数组。如果您确实传递了字符串,它只会包含您的 test.txt 文件的最后一行。

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,我无法打印“explode”结果的 [1] 组件,而 [0] 组件打印正确。在我的情况下,我解决了更改 while 循环的问题:

      while(!feof($myfile)) {
      
              $row = fgets($myfile);
      
              $components = explode(",", $row);
              $myVar = $components[1];
              echo $myVar;
      }
      

      while($row = fgets($myfile)) {
      
              $components = explode(",", $row);
              $myVar = $components[1];
              echo $myVar;
      }
      

      【讨论】:

        【解决方案5】:

        使用 file_get_contents()

        $row=file_get_contents("test.txt");
        $list=explode("++",$row);    
        echo 'Name:'.$list[0].'<br>';
        echo 'Sex:'.$list[1].'<br>';
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-15
          • 2020-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多