0

首先,我是 PHP 的菜鸟,但这是我的问题。我正在尝试从文本文件中读取一行,操作该行,然后将原始行和新行写入一个新的文本文件。由于某种原因,它在输出文件中添加了额外的返回或新行。

原始文件文本

/Volumes/EC/EC_0101/B-W Art/001_0101.EPS
...
/Volumes/EC/EC_0101/B-W Art/010_0101.EPS

用于测试的 HTML 输出

EC:EC_0101:B-W Art:001_0101.EPS EC EC_0101 B-W Art 001_0101.EPS
...
EC:EC_0101:B-W Art:010_0101.EPS EC EC_0101 B-W Art 010_0101.EPS

新文本文件输出

EC:EC_0101:B-W Art:001_0101.EPS
    EC  EC_0101 B-W Art 001_0101.EPS
...
EC:EC_0101:B-W Art:010_0101.EPS
    EC  EC_0101 B-W Art 010_0101.EPS

应该是制表符分隔的

EC:EC_0101:B-W Art:001_0101.EPS EC  EC_0101 B-W Art 001_0101.EPS
...
EC:EC_0101:B-W Art:010_0101.EPS EC  EC_0101 B-W Art 010_0101.EPS

我的代码

$file = fopen("files_list.txt", "r") or exit("Unable to open file!");
$filename = "files_list_tab.txt";
//Output a line of the file until the end is reached
while(!feof($file))
  {
  $strLink = fgets($file);
  //$strComment = $strLink;

  $strLink= str_replace("/",":",$strLink);
  $strLink= str_replace(":Volumes:","",$strLink);
  $strComment= str_replace(":","\t",$strLink);

  $strCombined = $strLink."\t".$strComment;
  $array[] = $strCombined;

  echo $strCombined. "<br>";

  }
fclose($file);

echo "Done <br>";

$strCombined = $array;
file_put_contents($filename, $strCombined);
echo "Done <br>";
4

3 回答 3

0

嗯,是的,它在原始文件中。

假设:

// fgets() returns this
strLink = "/Volumes/EC/EC_0101/B-W Art/001_0101.EPS\n"

// then it becomes this
strLink = "EC:EC_0101:B-W Art:001_0101.EPS\n"
strComment = "EC\tEC_0101\tB-W Art\t001_0101.EPS\n"

// later you do this
strCombined = strLink + "\t" + strComment

由于 strLink 和 strComment 都以原始结尾\n,所以它也在那里strCombined

于 2012-07-05T13:13:17.713 回答
0

fgets文件内容如下:

读取在长度 - 1 个字节已被读取、换行符(包含在返回值中)或 EOF(以先到者为准)时结束。如果没有指定长度,它将继续从流中读取,直到到达行尾。

您可以$strLink = trim(fgets($file));在处理之前使用删除换行符。

于 2012-07-05T13:13:29.100 回答
0

尝试:

...     
$strCombined = trim($strLink)."\t".$strComment;
...
于 2012-07-05T13:15:17.133 回答