
用Perl解决一个编程问题:一份txt文件中 第一行SW; C208.1第二行空格空格C210.1空格 C1195.1,第三行
DW;C209.1C210.1第四行空格空格C211.1空格C212.1以此类推变成一个hash,键是C208_1<=>SW,C210_1<=>SW,C1195_1<=>...
DW; C209.1 C210.1 第四行空格空格 C211.1空格C212.1 以此类推 变成一个hash,键是C208_1 <=>SW,C210_1<=>SW,C1195_1<=>SW,DW<=>C209_1等等,就是分号后面的数据共用一个SW,DW,但是分号后面的数据占据不止一行,现在拆开
展开
1个回答
展开全部
原始文件:
SW;C208.1;
C210.1 C195.1;
DW;C209.1 C210.1;
C211.1 C212.1;
脚本:
#!/usr/bin/perl
open IN,"<test.txt";
my %hash;
my $value;
while(<IN>){
if(/^(\w+);(.+);$/){
$value=$1;
my @name=split/\s/,$2;
foreach(@name){
$hash{$_}=$value;
}
}
elsif(/^\s+(.+);$/){
my @name=split/\s/,$1;
foreach(@name){
$hash{$_}=$value;
}
}
}
close IN;
foreach $key(sort keys %hash){
print "$key=>$hash{$key}\n";
}
结果:
C195.1=>SW
C208.1=>SW
C209.1=>DW
C210.1=>DW
C211.1=>DW
C212.1=>DW
SW;C208.1;
C210.1 C195.1;
DW;C209.1 C210.1;
C211.1 C212.1;
脚本:
#!/usr/bin/perl
open IN,"<test.txt";
my %hash;
my $value;
while(<IN>){
if(/^(\w+);(.+);$/){
$value=$1;
my @name=split/\s/,$2;
foreach(@name){
$hash{$_}=$value;
}
}
elsif(/^\s+(.+);$/){
my @name=split/\s/,$1;
foreach(@name){
$hash{$_}=$value;
}
}
}
close IN;
foreach $key(sort keys %hash){
print "$key=>$hash{$key}\n";
}
结果:
C195.1=>SW
C208.1=>SW
C209.1=>DW
C210.1=>DW
C211.1=>DW
C212.1=>DW
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询