sanku has asked for the wisdom of the Perl Monks concerning the following question:
output of the above code should be like in this format;MAIFNSLVFLPASFTLSYMWNFGSMLGIMLMSQILTGFFLTFYYTAGEAFSSVQYIMFEVNLGWLLRIMH +SNGASMFFLFIYLHIFKGLIYGSYRLIGVWLSGIFIYFLLMGIAFTGYVLIWGQMSYWAAVVITSLMTS +VPYLGKYLVWWGSFSVCENTLKFFYSVHFILPWSLMVLVVFHLFFLHFTGSSSSLYCHGDYDKIHFFPS +FWLKDGFDIFFYFFLILFSLYFSFDLSDPMIFVESDSMAS
In the above sequence the search patter is 'SSS' if they their are 4 'S' continousely then it should be colored as SSSS In case if the search patter is found between two gaps of the sequences like as follows the it should be colored as follows MAIFNSVFSS SSALKM i tryed it by as following codesMAIFNSLVFL PASFTLSYMW NFGSMLGIML MSQILTGFFL TFYYTAGEAF SSVQYIMFEV NLGWLLRIMH SNGASMFFLF IYLHIFKGLI YGSYRLIGVW LSGIFIYFLL MGIAFTGYVL IWGQMSYWAA VVITSLMTSV PYLGKYLVWW IWGSFSVCEN TLKFFYSVHF ILPWSLMVLV VFHLFFLHFT G<font color=red>SSS</font +>LYCHG
can i able to reduce this code so, Please, give me any suggession on it, because it take more time to execute this program as i colored the pattern by using arrays, if their is any way to reduce the code so, i am eager to know the answer, form you monk, please can any body give me suggession so for it. by sanku.My code is @y=q{MAIFNSLVFLPASFTLSYMWNFGSMLGIMLMSQILTGFFLTFYYTAGEAFSSVQYIMFEVNLGWL +LRIMHSNGASMFFLFIYLHIFKGLIYGSYRLIGVWLSGIFIYFLLMGIAFTGYVLIWGQMSYWAAVVIT +SLMTSVPYLGKYLVWWGSFSVCENTLKFFYSVHFILPWSLMVLVVFHLFFLHFTGSSSSLYCHGDYDKI +HFFPSFWLKDGFDIFFYFFLILFSLYFSFDLSDPMIFVESDSMAS}; while($j<$n-$m) { if($lastch==$y[$j+$m-1] && $firstch == $y[$j]){ $data="";$pat=""; for($i=$m-1;$i>=0;$i--){ $data=$y[$j+$i].$data; $pat=$x[$i].$pat; } if($data eq $pat){ @start=($j); @end=$j+$m; print "<b><font color=brown face=britanic,helvetica,sans-serif,times, +gill,courier size=4>Match Position : ",$j+1; #print "\n$entry\n$title +\n$acc \n SEQUENCES=>\n@y\n\n"; print " - ", $j +$m,"</b></font>"; print "<font color=blue size=4 face=\"courier\"><b>";$ss=0; for(my $j=0;$j<=$#start;$j++) { for(my $i=$ss;$i<=$#y;$i++) { if($start[$j] == -1) { next; } if($i % 10 == 0) { print " ";} if($i % 50 == 0) {print "<br>";print OUTFILE"\n";} if($start[$j] != $i && $i<$start[$j]) { print "$y[$i]"; print OUTFILE "$y[$i]"; } if($start[$j] == $i) { line: $k=$i; do { print "</b></font><font color=red siz +e=4 face=\"courier\"><b><blink>"; if($k % 10 == 0 && $k != $start[$j]) { print " "; print OUTFILE " "; } if($k % 50 == 0 && $k != $start[$j]) { print "<br>";print OUTFILE "\n"; } print "$y[$k]</b></blink></font><font +color=blue size=4 face=\"courier\"><b>"; print OUTFILE "$y[$k]"; $k++; }until($end[$j] == $k || $end[$j+1] == $k +);$ss=$k; if($k-1 == $start[$j+1]) { $i=($start[$j+1])+1; $j=$j+1;goto line; } elsif($k-1>=$start[$j+1] && $j <$#start) { $i=$k; $j=$j+1;goto line; } else {last;} } } } for(my $i=$k;$i<$#y;$i++) { if($i % 10 == 0) { print " "; print OUTFILE " ";} if($i % 50 == 0 ) {print "<br>";print OUTFILE "\n";} print "</b></font><font color=blue size=4 face=\"c +ourier\"><b>$y[$i]"; print OUTFILE "$y[$i]"; } print "</b></font><br> <hr color=navy>";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: spliting a lengthy text
by BrowserUk (Patriarch) on Nov 27, 2006 at 10:26 UTC | |
by reasonablekeith (Deacon) on Nov 27, 2006 at 10:35 UTC | |
by BrowserUk (Patriarch) on Nov 27, 2006 at 11:02 UTC | |
by grinder (Bishop) on Nov 27, 2006 at 14:17 UTC | |
|
Re: spliting a lengthy text
by davorg (Chancellor) on Nov 27, 2006 at 10:06 UTC | |
|
Re: spliting a lengthy text
by Samy_rio (Vicar) on Nov 27, 2006 at 10:15 UTC | |
by BrowserUk (Patriarch) on Nov 27, 2006 at 10:23 UTC | |
|
Re: spliting a lengthy text
by johngg (Canon) on Nov 27, 2006 at 11:02 UTC | |
|
Re: spliting a lengthy text (BioPerl)
by bobf (Monsignor) on Nov 27, 2006 at 20:51 UTC | |
|
Re: spliting a lengthy text
by themage (Friar) on Nov 27, 2006 at 10:26 UTC | |
|
Re: spliting a lengthy text
by jwkrahn (Abbot) on Nov 27, 2006 at 10:33 UTC | |
|
Re: spliting a lengthy text
by jwkrahn (Abbot) on Nov 27, 2006 at 10:45 UTC |