我正在尝试拆分txt文件的内容以使用perl提取相关信息,但我似乎无法正确格式化我的split语句。该文件的一行如下所示:
1.8|8|28|98|1pter-p22.1|SAI1, MTS1, TFS1|C|Suppression of anchorage independence-1 (malignant transformation suppression-1)|154280|S, H|||4(Tfs1)|
我的split语句如下所示:
my $file;
my $important;
my $line;
my @info;
foreach $line (@OMIMFile) {
my ($noSystem, $month, $day, $year, $cytoLoc, $geneSymb
, $geneStat, $title, $mimNo, $method, $comment, $disorder
, $mousCorr, $ref) = split ("|", $line);
$important = $geneSymb.":".$disorder;
push @info, $important if ($geneStat =~ /C/i);
}
我希望@info的每一行都是由冒号分隔的$ geneSymb和$ disor的组合,但是目前@info的打印不返回任何内容,而且$ important返回这样的输出:
|:||:|2:7|:|1:||:|0:||:|0:|1:85:|7:|9:01:37:93:93:93:92:71: .....
我在哪里错了?
提前致谢!
答案 0 :(得分:1)
这是一个修复。
你的一些变量不是本地的。
my $file;
my @info;
foreach my $line (@OMIMFile) {
my ($noSystem, $month, $day, $year, $cytoLoc, $geneSymb
, $geneStat, $title, $mimNo, $method, $comment, $disorder
, $mousCorr, $ref) = split (/\|/, $line);
my $important = $geneSymb.":".$disorder;
push @info, $important if ($geneStat =~ /C/i);
}
答案 1 :(得分:0)
使用哈希切片会更加整洁:
my @fields = qw/ noSystem month day year cytoLoc geneSymb geneStat title mimNo method comment disorder mousCorr ref /;
my @info;
for (@OMIMFile) {
my %line;
@line{@fields} = split /\|/;
my $important = join ':', @line{ qw/ geneSymb disorder / };
push @info, $important if $line{geneStat} =~ /C/i
}