2012-07-09 7 views
8

レコードを区切るためにCR/LFを使用するファイルがありますが、個々のレコードにLFが含まれることがあります。 Perl新しい行区切り文字の問題

while (<$in>) 
{ 
    #extract record data 
} 

は、私は上記のように、このコードを読み取るようにしようとしています、これは(私が期待するよう)のみLFを含むレコードを分割します。私はしかし、再割り当てされた $/がこの問題を解決すると予想しましたが、完全なファイルが1回の反復で読み込まれるように見えます。

$/ = "\r\n"; 
while (<$in>) 
{ 
    #extract record data 
} 

誰でもここで解決策を提案できますか?

WindowsでActivestate Perlを使用しています。

答えて

3

Windows上でしばらく

binmode($in); 
4

$/"\n"に設定してみてください。 Newlines in perlportから:

Perlは論理的である何 が使用中のプラットフォームに依存してもよい「論理」は改行を表すために\nを使用しています。 MacPerlでは、\nは常に\015を意味します。 DOSishののPerlと 、\nは通常\012を意味するが、 「テキスト」モードでファイルにアクセスするとき、perlはあなたが読み書きしているかどうかに応じて、 \015\012(またはから)に変換し:crlf層を使用しています。

10

前にこれを試して、perlはテキスト(perlport)としてデータを読み込むことにより、CRLFと不可能LFの区別をする、唯一のLF着信CRLFの改行コードを変換します。そのため、あなたはファイルハンドルにbinmodeを使用してバイナリモードでデータを読み取ることがあります。その後

binmode($in); 

は、入力レコードセパレータをする「\ 015 \ 012」を設定し、読み込みにできるようにあなたの記録通常:

$/ = "\015\012"; 
while (<$in>) { 
    ... 
} 

挨拶し、マティアス

PS:私は、現時点では、ローカルであることをテストする機会を持っていないので、それが動作しない場合、私は後悔しています。

+0

ありがとうございました。 – Hans

関連する問題