我正在解析一个文件,每个奇数行给我一个“字母”(A,B,C等),每个偶数行给我一个“二进制序列”(0101,1111,0001等)。
我想创建一个数组哈希(但是如果你认为另一种数据类型更合适,请告诉我)以保持所有行的组织。
我知道数组的外观可能如下:
%HoA = (
A => [ "0001", "1010" ],
B => [ "0011", "1111", "0111" ],
C => [ "0000"],
);
我知道如何从这种数据类型访问信息。
但是,我在创建此数据类型时遇到了问题。
例如,我能够正确地获取文件的“字母”($ letter)和“二进制序列”($ seq),使用类似的东西:
while (<INPUT>) {
s/[\n\r]//mg;
if ( /^>/) {
$letter = substr($_, 7, 1);
}
if ( /^[01]/) {
$seq = $_;
}
}
但我不确定如何:
如果无法在Perl中创建这样的数据类型,那么我将不胜感激任何关于要转向的数据类型的建议!我需要将每个“字母”保留在其所有“序列”上。
非常感谢任何帮助!
答案 0 :(得分:4)
假设您的数据是绝对可靠的。
#!/usr/bin/perl
use strict;
use warnings FATAL => qw/all/;
use Data::Dumper;
$/ = "\r\n";
my %HoA;
while (<DATA>)
{
my $letter = substr($_, 7, 1);
chomp(my $seq = <DATA>);
push @{$HoA{$letter}}, $seq;
}
print Dumper \%HoA;
__DATA__
> A
0001
> A
1010
> B
0011
> B
1111
> B
0111
> C
0000
答案 1 :(得分:3)
要创建哈希,只需将my %HoA;
放在代码的开头即可。给定$letter
和$seq
,您只需执行push @{$HoA{$letter}}, $seq;
即可立即完成步骤2-4,而Perl会处理详细信息。
答案 2 :(得分:2)
检查perl data structures cookbook。
my %HoA;
my $letter;
while (<INPUT>) {
s/[\n\r]//g;
if ( /^>/) {
$letter = substr($_, 7, 1);
}
if ( /^[01]/) {
# $seq = $_;
push @{ $HoA{$letter} }, $_;
}
}