从文本文件创建多维向量

时间:2013-03-02 16:40:18

标签: perl multidimensional-array

我有以下问题:

我有一个看起来像的文件:

1 2 4 5 7 8
3 1 3 7 8 9 10 11
2 4 1 3 5
4 5 6 7

我想创建不同的向量:

vector[0][0]=1 , vector[0][1]=2, ... , vector[1][0]=3, vector[1][1]=1 etc etc

我还在开始,我尝试过:

my $file = 'file.dat';
open (INFO, $file);
my @vector = <INFO>;
close (INFO);

但它只创建一个数组来读取文件中包含的内容,并且不会赋予文件元素一个确切的位置(因为我期望的结果)。

2 个答案:

答案 0 :(得分:4)

迭代文件,拆分行并将它们放入一个你推入主阵列的匿名数组中:

use strict;
use warnings;
use Data::Dumper;

# Use the lines below for your real data
#my $file = 'file.dat';
#open my $fh, "<", $file or die "Cannot open $file: $!";
my @vector;
while (<DATA>) {   # replace <DATA> with <$fh>
    push @vector, [ split ];
}
print Dumper \@vector;

__DATA__
1 2 4 5 7 8
3 1 3 7 8 9 10 11
2 4 1 3 5
4 5 6 7

<强>输出:

$VAR1 = [
          [
            '1',
            '2',
            '4',
            '5',
            '7',
            '8'
          ],
          [
            '3',
            '1',
            '3',
            '7',
            '8',
            '9',
            '10',
            '11'
          ],
          [
            '2',
            '4',
            '1',
            '3',
            '5'
          ],
          [
            '4',
            '5',
            '6',
            '7'
          ]
        ];

答案 1 :(得分:2)

您可以非常简单地使用map和正则表达式来选择数字子字符串my @vector = map [ /\d+/g ], <FILEHANDLE>

该程序从DATA文件句柄读取以便于演示。您通常会使用open my $fh, '<', 'myfile' or die $!自行打开文件并从该文件句柄中读取。

Data::Dump只显示数据结构,否则不必要。

use strict;
use warnings;
use 5.010;

my @vector = map [ /\d+/g ], <DATA>;

use Data::Dump;
dd \@vector;

say "\$vector[0][0] = $vector[0][0]";
say "\$vector[0][1] = $vector[0][1]";
say "\$vector[1][0] = $vector[1][0]";
say "\$vector[1][1] = $vector[1][1]";


__DATA__
1 2 4 5 7 8
3 1 3 7 8 9 10 11
2 4 1 3 5
4 5 6 7

<强>输出

[
  [1, 2, 4, 5, 7, 8],
  [3, 1, 3, 7 .. 11],
  [2, 4, 1, 3, 5],
  [4 .. 7],
]
$vector[0][0] = 1
$vector[0][1] = 2
$vector[1][0] = 3
$vector[1][1] = 1