我是Perl编码和新手的新手。我正面临着一种情况。这是问题陈述:
我有一个文件,其中包含一些矩阵形式的数据(仅限数字),如
1 2 3 4 5 6 .......
7 9 4 6 7 8 .......
...................
...................
我有另一个文件,其中包含2行数据(某些坐标),如
30 50
04 09
80 90
.. ..
.. ..
这些是位于第一个文件中的数据的坐标,我想从第一个文件中提取该数据。粘贴在第二个文件的第3行,例如在第一种情况下,我必须搜索第30行中的元素&第一个文件中的第50列&将其粘贴到第二个文件的第1行第3列。
答案 0 :(得分: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中变得很难,但并非不可能。
要访问第二个文件坐标处的数据(我假设文件句柄为$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或更高版本。