嗨,我是新的perl,我坚持一个问题。我正在创建哈希散列,因为我想存储几行作为值。我只在价值上唱歌。如何存储散列值散列中的几行
FILE.TXT
family(){
kapoor(){
member1(){
male(){
between : 0 to 5
person : 2
their name is bla & bla.
and bla bla......
blaa.....
}
male(){
between : 5 to 5
person : 20
their name is bla & bla bla.
and bla bla......
blaa.....
}
}
member2(){
male(){
between : 0 to 5
person : 2
their name is bla & bla.
and bla bla......
blaa.....
}
male(){
between : 5 to 5
person : 20
their name is bla & bla bla.
and bla bla......
blaa.....
}
}
}
rai(){
member1(){
male(){
between : 0 to 5
person : 2
their name is bla & bla.
and bla bla......
blaa.....
}
male(){
between : 5 to 5
person : 20
their name is bla & bla bla.
and bla bla......
blaa.....
}
}
member2(){
male(){
between : 0 to 5
person : 2
their name is bla & bla.
and bla bla......
blaa.....
}
male(){
between : 5 to 5
person : 20
their name is bla & bla bla.
and bla bla......
blaa.....
}
}
}
O/P应该是:
family=>{
kapoor => {
member1=>{
0 to 5=> person : 2
their name is bla & bla.
and bla bla......
blaa.....
}
member2=> {
5 to 5 => person : 20
their name is bla & bla bla.
and bla bla......
blaa.....
}
rai =>{
/...................etc
}
我得到的值只有一行,像
family=>{
kapoor => {
member1=>{
0 to 5=> person : 2
}
member2=> {
5 to 5 => person : 20
}
rai =>{
/...................etc
}
这里是我的尝试:
while(my$line=<$fh>)
{
if($line=~/$family_name_re/)
{
$family_name=$1;
$family_count=$cell_count+1;
}
elsif ($line=~/$member_re/)
{
$member = $1;
}
elsif ($line=~/$age_re/)
{
$age_range=$1;
$data{$family_name}{$member}{$age_range}=$line;
}
}
print Dumper(\%data);
print "Number of cell is $cell_count\n";
close ($fh);
我不知道如何分配多个行来创建值。我在分配价值的同时尝试,但没有奏效。
(3或任何数量的线,你需要)..像'$一号线= <$fh>','$ 2号线= <$fh>'等并在分配之前将它们与'$ line'连接起来 – Sundeep
您的输入文件非常混乱:嵌套看起来不正确(member1是两个男性)并且您忽略了男性分组。此外你的代码是不完整的,因为你不给我们正在使用的正则表达式。正如@spasic所说的,你应该在某个时候读取更多的行,因为目前你只能以行为单位读取/存储文件中的数据。这是目前的核心问题。 – eballes
ebailes说,文件格式及其解析没有多大意义。你的散列分配看起来很好,但是(除了不清楚'$ line'实际上是什么)。以正确格式向我们显示文件和正则表达式。 – zdim