1

固定長のレコードで構成されたテキスト ファイルがありますが、間に改行がなく、すべてが 1 行になっています。Perlで処理する最良の方法は何ですか? ありがとう!

4

3 に答える 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 に答える