-1

私はPerlコーディングに不慣れで、状況に直面しています。問題の説明は次のとおりです。

次のような行列形式のデータ(数値のみ)を含むファイルがあります

1 2 3 4 5 6 .......
7 9 4 6 7 8 .......
...................
...................

次のような2行のデータ(いくつかの座標)を含む別のファイルがあります

30 50
04 09
80 90
.. ..
.. ..

これらは最初のファイルにあるデータの座標です。最初のファイルからそのデータを抽出し、2番目のファイルの3番目の行に貼り付けます。たとえば、最初のケースでは、30番目の行と50番目の要素を検索する必要があります。最初のファイルの列と2番目のファイルの1行3列目に貼り付けます。

4

1 に答える 1

3

これは難しいことではありません。

まず、値マトリックスを解析する必要があります。入力がファイルハンドル$fhにある場合は、次のように実行できます。

my @data;
while(<$fh>) {
  chomp;              # remove newline
  my @row = split;    # split the current line on whitespace
  push @data, \@row;  # put a reference to this row into @data.
}

配列にはスカラーしか含めることができないため、行の参照をデータマトリックスに配置する必要があります。

上記は次のように書くことができます

my @data = map { chomp; [split] } <$fh>;

代わりは; は[...]匿名のarrayrefを生成mapし、ブロック内のアクションを適用してリストを変換します。

データはのようにアクセスできます$data[$y][$x]。インデックスを交換したい場合、これはPerlで厄介になりますが、不可能ではありません。

2番目のファイルの座標のデータにアクセスするには(ファイルハンドルは$fh2)であると想定します。これらの行を分割して、要素を検索します。

while (<$fh2>) {
  chomp;
  my ($x, $y) = split;
  say "at x=$x, y=$y there is $data[$y][$x]";
}

use strict; use warnings;エラーをキャッチするために、必ず各スクリプトの上部に配置してください。sayperl5.10以降が必要です。

于 2013-01-24T19:20:33.480 に答える