UNIXスタイルのエンディングでUTF-16リトルエンディアンでエンコードされた1Gbのテキストファイルをperlでストリーム処理する必要があります(0x000Aを含まない0x000Aのみストリーム内)とLE BOMの最初の部分です。ファイルはWindows上で処理されます(Unixソリューションも必要です)。ストリームプロセスとは、while(<>)、行ごとの読み書きを使用することを意味します。 次のようなコマンドラインを使用するといいでしょう:
perl -pe "BEGIN {SOME_PREPARATION}; s/SRC/DST/g;" infile.txt>テストのための入力のWindows perlでBOMとUnixの行末を持つストリームプロセスUTF-16ファイル
ヘキサ・ダンプ(二行:それぞれの "a" および "b" の文字):Outfile.txtを FF FE 61 00 0A 00 62 00 0A 00
FF FE 61 00 0A 00 63 00 0A 00PS:S/B/C/G等
処理( "C" に置き換え、 "B")出力を与えるべきです。今はすべての試行でCRLF出力に問題があります(0D 0Aバイトが出力され、不正なユニコード記号が出力され、同じUnixスタイルを維持するために0D00なしで0A00が必要です)。 1行では奇数行で6100、出力では偶数行で0061です。
perl -pe "BEGIN { binmode $_, ':raw:encoding(UTF-16LE)' for *STDIN, *STDOUT }; s/b/c/g;" <infile.txt >outfile.txt
しかし、私は、ファイルがSTDIN上になるように<infile.txt
の代わりinfile.txt
を使用していたことに注意してください:
Perl 5.what?いくつかの違いがあり、あなたの答えが正しいかどうかを確認したいと思います。 – ikegami
これは難しい理由は、Perlが追加する:crlfを追加する前に:エンコーディング(UTF-16le)をハンドルに追加し、それらを間違った順序で配置するからです。 – ikegami
@ikegamiあなたは説明することができます:crlfの使用法? ":crlf:encoding(UTF-16LE)"のように表示されている場合はどうなりますか? –