いくつかの学区が私に送ったデータを解析するPerlスクリプトがあります。新しい学校を追加しているが、以前に一度も経験していなかった問題に直面するようになりました。これにより、$line = <INPUT>
1行ではなくファイル全体を食べます。
file
そのファイルを実行すると、UTF-8 Unicode text, with CRLF, CR line terminators
他のすべてのファイルが返されますASCII text, with CRLF line terminators
。 dos2unixで実行しましたが、それでも長い文字列で実行されます。 Emacsで編集しても、^ Mは行末で表示されます。
この行末を使用可能な行末に変換するにはどうすればよいですか?
修正する: ベンダーから行末が別のファイルを送信したが、まだ機能しません。 CRLF、LFとして報告されます。私いくつかのサンプルライン。
私のコードの一部は次のとおりです。
$line = <INPUT> if ($schooldistricts{$schooldistrict}{'header'});
LINE: foreach $line (<INPUT>) {
next LINE unless ($line =~ /\S/);
<do stuff>
}
ファイルに適切に削除されたヘッダーがあります。その後、foreachループから最初の行を正常に読み込みます。それがすべてです。ファイルの残りの部分が空のようです。
$/
設定しようとしましたが、\r\n\n
スクリプトは何もしませんでした。私が試しても同じです\r\n
。行末にどの文字がエンコードされているかを明示的に確認する方法はありますか?
セカンドアップデート:実験的にファイルをExcelにインポートして分割し、タブ区切りのファイルとして保存してみました。サーバーでdos2unixを実行します。 Perlスクリプトは、2行目以降もまだ解析できません。File
今戻ってくださいUTF-8 Unicode text, with CRLF line terminators
。これが正しい行の終わりなので、Unicodeは問題です。 Unicodeは行末を別々にエンコードしますか?
ベストアンサー1
perl -pi -e 's/\r\n?/\n/g' your-file
mac2unix
or操作と同様に、CR文字(オプションでLFが続きます)をLFに変換しますdos2unix -c mac
。
または:
perl -pi -e 's/\r\n?/\r\n/g' your-file
これがスクリプトで予想されるものである場合は、CRLFに変換します(たとえば、$/
入力レコード区切り文字をに設定するため"\r\n"
)。