0

要約すると、stream_get_line を使用してファイルの行を読み取り、文字列を置き換えてから、その行を別のファイルに書き込みます。

stream_get_line を使用し、「終了」パラメータを指定して関数に行を読み取るように指示するか、新しい行がない場合は 130 バイトを読み取ります。

私が知りたいのは、まったく同じ行 (文字列の置換を除く) を新しいファイルに書き込む必要があるため、3 番目のパラメーター (PHP_EOL) が見つかったかどうかを知る方法です。

参考のため...

string stream_get_line ( resource $handle , int $length [, string $ending ] )

主に最後の行に必要です。改行文字が含まれる場合と含まれない場合があります。

私の最初のアイデアは、ファイルの最後の行を探し、その行で改行文字を検索して、編集した行に改行を付ける必要があるかどうかを確認することです。

4

1 に答える 1

0

ストリームが ASCII モードの場合は、 fgetsを使用してみてください (これは Windows でのみ重要です)。見つかった場合、その関数には改行が含まれます。

$line = fgets(STDIN, 131);

それ以外の場合は、ftellを使用して読み取られたバイト数を確認し、行末があったかどうかを判断できます。たとえばfoo.php

<?php
while (!feof(STDIN)) {
    $pos = ftell(STDIN);
    $line = stream_get_line(STDIN, 74, "\n");
    $ended = (bool)(ftell(STDIN) - strlen($line) - $pos);
    echo ($ended ? "YES  " : "NO   ") . $line . "\n";
}

実行するecho -ne {1..100} '\n2nd to last line\nlast line' | php foo.phpと、次の出力が得られます。

NO   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
NO    29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 5
NO   3 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 
YES  78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 
YES  2nd to last line
NO   last line
于 2013-01-11T12:49:21.257 に答える