如何在Perl中从多个数组创建哈希

时间:2017-10-30 20:24:10

标签: perl hashtable

我有一个从Ansys导出的文本文件,其中包含四列(NodeNumber,Xcoordinate,Ycoordinate和Zcoordinate)。我想获取此文本文件的内容并在perl中创建一个哈希表。我能够通过正则表达式为列中的每个值创建一个数组,但我的问题是我如何获取这些数组并将它们放在哈希表中?我最终想要一个所有节点号的列表,条件是Ycoordinate == 0和Zcoordinate == 0。

以下是我的代码:

#!/usr/bin/perl -w
use strict;
use Cwd;

use lib "C:/begperl";
use BeginPerlBioinfo;

open (MYINPUTFILE, "<xyzNodeCoords.lis");

my @XYZcoordData = <MYINPUTFILE>;
my @NodeNumber;
my @xCoord;
my @yCoord;
my @zCoord;


foreach (@XYZcoordData)
{
    if($_ =~ m/^\s+(\d+)\s+(\S+)\s+(\S+)\s+(\S+)/i)
    {
        push(@NodeNumber,$1);
        push(@xCoord,$2);
        push(@yCoord,$3);
        push(@zCoord,$4);
    }

}

exit(0);

如何在上面使用四个数组(@NodeNumber,@ xCoord,@ yordord,@ zCoord)并将它们推入表中? NodeNumber值是唯一的,因此它应该用作主键。

1 个答案:

答案 0 :(得分:0)

  

我最终想要一个所有节点号的列表,条件是Ycoordinate == 0和Zcoordinate == 0。

my $qfn = 'xyzNodeCoords.lis';

open(my $fh, '<', $qfn)
   or die("Can't open \"$qfn\": $!\n");

my @list;
while (<$fh>) {
   s/^\s+//;
   my ($node, $x, $y, $z) = split;
   push @list, $node if $y == 0 && $z == 0;
}