【发布时间】:2012-11-07 12:20:14
【问题描述】:
我有一个如下所示格式的大文本文件 -
ID SNP
FT SNP 433
FT /note="refAllele: T SNPstrains: 7083_1#5=C 7414_8#8=C 7480_8#49=C "
FT /colour=1
FT SNP 442
FT /note="refAllele: T SNPstrains: 7065_8#2=C 7065_8#94=C 7083_1#2=C 7083_1#3=C 7083_1#41=C 7083_1#42=C 7083_1#43=C "
FT /colour=1
FT SNP 460
FT /note="refAllele: T SNPstrains: 7564_8#14=C "
FT /colour=1
FT SNP 703
FT /note="refAllele: G SNPstrains: 7521_5#39=A (non-synonymous) (AA Ala->Thr) "
FT /colour=2
FT SNP 937
FT /note="refAllele: G SNPstrains: 7414_8#30=T (non-synonymous) (AA Val->Leu) "
FT /colour=2
FT SNP 1269
FT /note="refAllele: G SNPstrains: 7480_7#22=A (synonymous) 7480_7#62=A (synonymous) "
FT /colour=3
FT SNP 1804
FT /note="refAllele: T SNPstrains: 7414_7#66=A (non-synonymous) (AA Ser->Thr) 7414_8#44=A (non-synonymous) (AA Ser->Thr) 7521_6#54=A (non-synonymous) (AA Ser->Thr) "
FT /colour=2
这是我使用的代码 -
$file="input file";
open IN, "$file";
open OUT, ">output file";
print OUT "Coordinate No of Strains AA Change\n";
while(<IN>){
if(m/^FT\s+SNP\s+(\d+)/){
$SNP=$1;
}elsif(m/^FT\s+\/note="(.*)"/){
$line=$1;
$count = ($line =~ tr/=/=/);
$line =~ m/\((AA \w+->\w+)\)\s*$/;
$change = $1 || "";
}elsif(m/^FT\s+\/colour=(\d+)/){
print OUT "$SNP $count $change\n" if $cod{$1} eq "non";
}
}
目的是有一个类似于下面的输出文件(用于文本文件的上述部分)
Coordinates No of Strains AA Change
703 1 AA Ala->Thr
937 1 AA Val->Leu
1804 3 AA Ser->Thr
但是,当我将代码应用到文本文件时,我收到一个错误:Use of uninitialised values ($count or $change) in concatenation (.) or string at line 23. 有问题的行是
print OUT "$SNP $count $change\n" if $cod{$1} eq "non";
错误是指包含
的行FT /colour=2
即显示非同义突变的行,例如示例文本中的第 13 行。
请注意,我是编程新手,大部分代码不是我编写的。任何帮助将不胜感激!
非常感谢。
【问题讨论】:
-
假设
%cod中有一些伪造的值,我没有收到给定输入的警告。我也没有得到你声称的输出。 -
如果有的话,你会得到什么输出?
-
我已经对整个文件重复使用此代码,这导致了我之前所说的输出,其中一部分如下所示 -
Coordinate No of Strains AA Change 1299 1 AA Gin->His 3791 2 AA Val->Ala 4759 1 AA Gly->Ala但是,如果我对示例文本执行此操作,我给了文件 2,我得到了这个输出 -Coordinate No of Strains AA Change 1299和使用未初始化值的错误,就像我在第一个文件上使用代码时一样。 -
您应该使用一个独立且正确的示例,其中输入、代码和输出都匹配。然后说明您的确切错误消息。最好只询问有关明确使用
strict和warnings的代码的问题,并检查诸如open失败之类的简单错误。
标签: perl