Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Why am I getting the result only from 1st substring and not from substring 2 and 3 in using the do-until loop with while loop inside it?

by marto (Chancellor)
on May 18, 2012 at 11:53 UTC ( #971289=note: print w/ replies, xml ) Need Help??


in reply to How can I get the correct results for substrings 2 and 3 in a do-until loop?

You seem to enjoy making life difficult for yourself. You post messy code making it difficult to read and follow program structure. Some posts include use strict; others don't. Be consistent. Here is the perltidy output for this script to get you started, with a couple of changes:

#!/usr/bin/perl use strict; use warnings; $DNA1 = "GGCT CTGCGCGGNN"; # Remove N from sequence $DNA1 =~ s/N//ig; # Remove whitespace Line 5 $DNA1 =~ s/\s//g; # In a loop, find every 4-base substring & then find its # GC%, GC-skew & Purine Loading Index (PLI): $fm = 1.010; # Line 9 do { while ( my $fm = substr( $DNA1, 0, 4 ) ) { $A = 0; $T = 0; $G = 0; $C = 0; while ( $fm =~ /A/ig ) { $A++ } while ( $fm =~ /T/ig ) { $T++ } while ( $fm =~ /G/ig ) { $G++ } while ( $fm =~ /C/ig ) { $C++ } $tot1 = $A + $T + $G + $C; $gc1 = $G - $C; $gc2 = $G + $C; # Line 16 $cent = 100; $gccon2 = $gc2 / $tot1; $gccon3 = $cent * $gccon2; $gccon4 = sprintf( "%.2f", $gccon3 ); $gcskew = $gc1 / $gc2; $GCSkew = sprintf( "%.4f", $gcskew ); # To find Purine Loading Index (PLI): $four = 4; $at1 = $A - $T; $x1 = ( $gc1 + $at1 ) / $tot1; $pli = $thousand * $x1; $PLI = sprintf( "%.0f", $pli ); # No. of sliding Windows: $numberwin = $total1 / $four; $NoWindows = sprintf( "%.0f", $numberwin ); print " Purine Loading Index of each 1Kb Window=$PLI bases/4- +base.\n"; $output = "GC-SkewResult .txt"; unless ( open( RESULT, ">$output" ) ) { print "Cannot open file\"$output\".\n\n"; exit; } print RESULT"\n RESULTS for substrings:\n GC-Skew values of substrings:\n $GCSkew\n\n Percent GC Content of substrings:\n $gccon4\n\n"; close(RESULT); } } until ( $fm =~ /^\s*$/ ); exit;

Poor formatting isn't going to make things any easier to fix. Define the required variables and actually work through the program yourself, adding debugging lines where required (start with simple print statements indicating the point your program is executing). See also Debugging and Optimization from the tutorials section.

Update: Also, your post titles are always too long, see How do I compose an effective node title?.

Update 2: In future please clearly mark updates, please don't replace the entire post with a new one rendering existing replies out of context.


Comment on Re: Why am I getting the result only from 1st substring and not from substring 2 and 3 in using the do-until loop with while loop inside it?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://971289]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2014-08-30 18:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (293 votes), past polls