我在文件中的每一行附加一些内容,然后将其写入新文件。
但是,当我查看新文件时,它正在做的是从旧文件中写入行,然后在新行上写下应该附加到该行的内容。
因此,如果旧文件中的第一行是
A
新文件中的第一行和第二行是
A
/appendage
应该是一行:
A /appendage
如何修复我的代码,使附属物与它们被附加到的行在同一行?
function writeTag($tags, $line, $file){
foreach($tags as $t){
$line .= " /".$t['tag']." ";
fwrite($file, $line);
}
}
$tagger = new PosTagger('lexicon.txt');
$lines = file('dictionary.txt');
$out = fopen("tagged.txt", "w");
foreach($lines as $line){
$tags = $tagger->tag($line);
writeTag($tags, $line, $out);
}
更新
随着bwoebi的更新回答添加IGNORE_NEW_LINES,我得到的输出文件如下:
A /DT A$ /DT A&E /DT A&E /DT /NN A&M /DT A&M /DT /NN
A&P /DT A&P /DT /NN
我在寻找的是:
A /DT
A$ /DT
A&E /DT
A&E /DT /NN
A&M /DT
A&M /DT /NN
A&P /DT
A&P /DT /NN
答案 0 :(得分:1)
file()
返回字符串,直到换行符(\n
) 包含 :所以当有一个\n
时将其剪掉字符串的最后一个字符。
foreach ($lines as $line) {
if ($line[strlen($line)-1] == "\n")
$line = substr($line, 0, -1);
$tags = $tagger->tag($line);
writeTag($tags, $line, $out);
}
更新:更好的方法:使用FILE_IGNORE_NEW_LINES
。此常量可防止添加换行符。
$lines = file('dictionary.txt', FILE_IGNORE_NEW_LINES);
回答更新的问题:每次完成一个$tag
时附加换行符:
function writeTag($tags, $line, $file){
foreach($tags as $t){
$line .= " /".$t['tag']." ";
fwrite($file, $line."\n");
}
}