4

具体的には、PERLCOLS オプションで rcols を使用したいと考えています。

これが私がやりたいことです:

my @array;
getColumn(\@array, $file, 4); # get the fourth column from file

を使用すればできます\@arrayが、下位互換性のために、これを実行しないことをお勧めします。配列参照参照を使用してそれを行う方法は次のとおりです。

sub getColumn {

    my ($arefref, $file, $colNum) = @_;    

    my @read = rcols $file, { PERLCOLS => [$colNum] };
    $$arefref = $read[-1];

    return;
}

しかし、配列参照を引数として受け取るサブルーチンを作成する方法がわかりません@$aref = @{$read[-1]}。これは、各要素を個別にコピーします。

PS:PDL::IO::Misc ドキュメントを読むと、perl の配列はそうあるべきだと思われます$read[0]が、そうではありません。

PERLCOLS - ピドルではなく perl 配列に読み込まれる列番号の配列。読み取る列の明示的なリストで指定されていない列は、明示的な列の後に返されます。(デフォルト B)。

x86_64-linux-thread-multi用に構築されたPerl v5.10.0でPDL v2.4.4_05を使用しています

4

2 に答える 2

1

ここでの使用の難しさの一部はrcols、ユーザーがPDL-2.4.4を実行しているのに対し、rcolsドキュメントのバージョンはPDL-2.4.7のものであり、機能にバージョンの偏りがある可能性があることだと思います。rcols現在のPDL-2.4.10リリースでは、arrayrefを介して返されるperl配列としてデータの単一列を読み取るために簡単に使用できます。

pdl> # cat data
1 2 3 4
1 2 3 4
1 2 3 4

pdl> $col = rcols 'data', 2, { perlcols=>[2] }
ARRAY(0x2916e60)

pdl> @{$col}
3 3 3

現在のリリースでは、このperlcolsオプションを使用すると、最後にperlスタイルの列を追加するだけでなく、列の出力タイプを指定できることに注意してください。

その他のドキュメントを表示するには、PDLシェルで使用pdldoc rcolsまたは実行してください。help rcols良いリソースはperldlメーリングリストです。

于 2012-04-20T22:31:31.817 に答える
1

なぜこれが機能しないのかわかりません:

my $arr_ref;
getColumn( $arr_ref, $file, 4 );

sub getColumn {
  my ( $arr_ref, $file, $colNum ) = @_;

  my @read = rcols, $file, { PERLCOLS => [ $colNum ] };
  # At this point, @read is a list of PDLs and array references.

  $arr_ref = $read[-1];
}

rcols()ドキュメントを見ると、PERLCOLSオプションを追加すると、要求した列を配列参照として返すように見えるため、渡した配列参照に割り当てることができるはずです。

ドキュメントの質問については、明示的な列を指定していないため、rcols()最初にファイル内のすべての列をPDLとして返し、次に要求した列をPerlarrayrefsとして返します。これが理由です。あなたのarrayrefはで出てきます$read[-1]

于 2010-10-05T23:09:46.887 に答える