-1

我是 Perl 编码的新手,我正面临一种情况。这是问题陈述:

我有一个文件,其中包含一些矩阵形式的数据(只有数字),比如

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

我有另一个文件,其中包含 2 行数据(一些坐标),例如

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

这些是位于第一个文件中的数据的坐标,我想从第一个文件中提取该数据并粘贴到第二个文件的第 3 行,例如在第一种情况下,我必须搜索第 30 行和第 50 行中的元素第一个文件中的列并将其粘贴到第二个文件的第一行第三列中。

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>;

反而; 生成[...]一个匿名数组引用,并map通过在块中应用操作来转换列表。

可以像访问数据一样$data[$y][$x]。如果你想交换索引,这在 Perl 中会变得很糟糕,但并非不可能。

要访问第二个文件中坐标处的数据(我假设文件句柄是$fh2),我们只需拆分这些行并查找元素:

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

确保use strict; use warnings;在每个脚本的顶部捕获错误。say需要 perl 5.10 或更高版本。

于 2013-01-24T19:20:33.480 回答