将一个字符串附加到另一个字符串,但附加物位于新行而不是同一行

时间:2013-06-16 17:01:33

标签: php string file

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

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

因此,如果旧文件中的第一行是

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

1 个答案:

答案 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");
    }
}