首先,我是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>";
答案 0 :(得分: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
中。
答案 1 :(得分:0)
fgets
文档内容如下:
当读取长度 - 读取1个字节时,读取结束(其中 包含在返回值中)或EOF(以先到者为准)。 如果没有指定长度,它将继续从流中读取,直到 它到了终点。
您可以在处理之前使用$strLink = trim(fgets($file));
删除换行符。
答案 2 :(得分:0)
尝试:
...
$strCombined = trim($strLink)."\t".$strComment;
...