0

我将一些内容附加到文件中的每一行,然后将其写入一个新文件。

但是当我查看新文件时,它正在做的是从旧文件中写入行,然后在新行上写入应该附加到该行的内容。

所以如果旧文件的第一行是

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
4

1 回答 1

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");
    }
}
于 2013-06-16T17:04:46.833 回答