固定長のレコードで構成されたテキスト ファイルがありますが、間に改行がなく、すべてが 1 行になっています。Perlで処理する最良の方法は何ですか? ありがとう!
1453 次
3 に答える
8
まず、ファイルを開いて、それが bin モードであることを確認しましょう。
open my $fh, '<', 'file.name' or die "Cannot open file.name: $!";
binmode $fh;
ここで、レコードの長さを参照するように入力レコード セパレータを設定します (1 レコードあたり 120 バイトと仮定します)。
local $/ = \120;
それでは、レコードを読んでみましょう。
while (my $record = <$fh>) {
そして、そこからデータを取得したい場合は、解凍するものを書く必要があります:
my @elements = unpack("......", $record);
これで、@elements を処理して、while() {} ループを終了できます。
...
}
「プログラム」全体:
open my $fh, '<', 'file.name' or die "Cannot open file.name: $!";
binmode $fh;
local $/ = \120;
while (my $record = <$fh>) {
my @elements = unpack("......", $record);
...
}
close $fh;
于 2009-08-06T14:42:00.383 に答える
5
関数を使用してread FILEHANDLE,SCALAR,LENGTH
、一度にブロックをバッファに読み込みます...
use constant LEN => 60;
while (!eof $fh) {
my $len = read $fh, $buf, LEN;
die "short read" if $len < LEN;
# processing...
}
...そして、正規表現を使用してバッファを処理するunpack
か、好きな方法で処理します。
于 2009-08-06T14:24:23.830 に答える
2
ここではunpack()が役立つかもしれません。文字のリストを (「c」、「C」、または「W」を使用して) 指定することができ、自動的にリストに展開されます。使用するオプションについては、パックのドキュメントを参照してください。
于 2009-08-06T14:10:09.730 に答える