0

我有以下 txt 文件:

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

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

写入 .txt 文件:

名称:结婚

性别:M

血型: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);

这应该工作吗?因为它什么也不返回。

谢谢。

4

5 回答 5

4
$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 );
于 2012-12-05T10:11:17.973 回答
1

它不会输出任何内容,因为您没有使用$name$sex。尝试更改代码中的以下代码段,看看它现在做了什么:

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>";
 }
于 2012-12-05T10:06:58.867 回答
0

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

$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文件的最后一行。

于 2012-12-05T10:29:47.110 回答
0

我遇到了类似的问题,我无法打印“爆炸”结果的 [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;
}
于 2019-05-21T12:32:02.583 回答
0

使用file_get_contents()

$row=file_get_contents("test.txt");
$list=explode("++",$row);    
echo 'Name:'.$list[0].'<br>';
echo 'Sex:'.$list[1].'<br>';
于 2021-02-02T17:39:06.120 回答