2015-07-06 2 views
0

, поскольку мне нужно печатать в соответствии с разницей длины (от 693 до 712), как указано во всей строке последовательностей. Если я ввел длину как 20 it должен печатать только последовательность, которая отличается 20, и если я ввожу значение в текстовое поле как 20, а выпадающий выбор больше, чем должен напечатать длину seuences, которая больше чем двадцать.Как напечатать длину до указанного ввода в текстовом поле

example.txt

GGATCACGAGGTCAGGAGAT (693 TO 712) ATCTCCTGACCTCGTGATCC (3223 TO 3242) 
CAAAAAAAAAAAAAAAAAAA (917 TO 936) TTTTTTTTTTTTTTTTTTTG (2998 TO 3017) 
GAAACCCCGTCTCTACTAAAAATACAAAAAA (737 TO 767) TTTTTTGTATTTTTAGTAGAGACGGGGTTTC (3168 TO 3198) 

Perl

#!usr/local/bin/perl 
open(IN,"/home/httpd/cgi-bin/r/example.txt")|| die("Cannot open file"); 
while(<IN>) 
{ 
    if($_ =~ /^\w+\s+\((\d+)\s+[to]+\s+(\d+)\)/i) 
    { 
     $data=$_; 

     $num1=$1; 
     $num2=$2; 
     $diff=($num2-$num1)+1; 
     $str="a".$diff; 
     #print $str; 
     push(@$str,$data); 
    } 
} 

ответ

0

Я не знаю, как вы захватываете значение со стороны клиента, почему вы конкатенации "a" с $diff и добавления 1 в $diff, но он будет хорошо работать, если предоставленные значения из командной строки.

Значения хранятся в хеш вместо массива.

#!/usr/bin/perl 
use strict; 
use warnings; 
use Data::Dumper; 

open my $fh, '<', 'example.txt' or die "unable to open file: $!"; 
my %hash; 
while(<$fh>){ 
my @seq=split(/\)\s+/,$_); 
foreach(@seq) 
    { 
$_=$_.") "; 
#print $_; 
if($_ =~ /(\d+)\s*TO\s*(\d+)/i){ 
     my $num1=$1; 
     my $num2=$2; 
my $diff=($num2-$num1)+1; 
$hash{$_}=$diff; 

    } 
} 
} 
close($fh); 
#print Dumper(\%hash); 
print "enter the number: \n"; 
chomp(my $num=<>); 
if($num == 20){ 
foreach(keys %hash){ 
print "$_ => $hash{$_} \n" if($hash{$_} == 20); 
} 
} 
elsif($num > 20){ 
foreach(keys %hash){ 
print "$_ => $hash{$_} \n" if($hash{$_} > 20); 
} 
} 
Смежные вопросы