如何从文本文件中删除一行?

时间:2015-02-16 14:29:01

标签: php

write字符串data到for循环中的文本file中:

$vokatra_res = fopen(RP_MAIN . "vokatra.res","a+");
$p = $vokatra->lireTout(array(), array("type_id")); // getting rows from database
for($l=0 ; $l<$p['cnt'] ; $l++) {
    $str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'] . "\r\n";
    fwrite($vokatra_res, $str);
}
fclose($vokatra_res);

因此,文件末尾有一个空行。那么如何在关闭文件之前删除此空行?

2 个答案:

答案 0 :(得分:2)

您可以通过将额外换行添加到除最后一行之外的所有行来避免写入:

$newline = ($l < $p['cnt'] - 1) ? "\r\n" : ""; 

$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'] . $newline;

仅当循环未处理最后一行数据时,此代码才会填充$newline变量。 $newline的内容(无论是否包含&#34; \ r \ n&#34;或不连接)连接到每个字符串的末尾。

<强>附加: 三元运算符很难理解;考虑产生相同结果的代码:

if ($l < $p['cnt'] - 1) {
    $newline = "\r\n";
else {
    $newline = "";
}

答案 1 :(得分:0)

如果您不想在每次迭代中签入,您可以这样做:

$vokatra_res = fopen(RP_MAIN . "vokatra.res","a+");
$p = $vokatra->lireTout(array(), array("type_id")); // getting rows from database
for($l=0 ; $l<$p['cnt']-1 ; $l++) {
    $str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'] . "\r\n";
    fwrite($vokatra_res, $str);
}
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'];
fwrite($vokatra_res, $str);
fclose($vokatra_res);

您将最后一行留在for循环之外。你不要把“\ r \ n”放在上面。

否则:

$vokatra_res = fopen(RP_MAIN . "vokatra.res","a+");
$p = $vokatra->lireTout(array(), array("type_id")); // getting rows from database
for($l=0 ; $l<$p['cnt']; $l++) {
    $str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'];
    if ($l < $p['cnt'] - 1) {
        $str .= '\r\n',
    }
    fwrite($vokatra_res, $str);
}
fclose($vokatra_res);

如何在循环期间检查最后一行是不是很重要。重要的是避免双重写入文件,如:

for($l=0 ; $l<$p['cnt']; $l++) {
    $str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'];
    fwrite($vokatra_res, $str);
    if ($l < $p['cnt'] - 1) {
        fwrite($vokatra_res, '\r\n');
    }
}