[ Top-posting fixed ]
Mike Robeson wrote: > > In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] (John W. Krahn) > wrote: > > > > You keep changing the specs Mike. :-) Based on your code and data above, > > this will work: > > > > #!/usr/bin/perl > > use warnings; > > use strict; > > > > print "Enter the path of the INFILE to be processed: "; > > chomp( my $infile = <STDIN> ); > > open INFILE, $infile or die "Can't open $infile for input: $!"; > > > > print "Enter in the path of the OUTFILE: "; > > chomp( my $outfile = <STDIN> ); > > open OUTFILE, ">$outfile" or die "Can't open $outfile for output: $!"; > > > > print "Enter in the LENGTH you want the sequence to be: "; > > my ( $len ) = <STDIN> =~ /(\d+)/ or die "Invalid length parameter"; > > > > print OUTFILE "R 1 $len\n\n"; # The top of the file is supposed > > > > $/ = '>'; # Set input record separator > > > > while ( <INFILE> ) { > > chomp; > > next unless s/^\s*(\S+)//; > > my $name = $1; > > my @char = ( /[acgt]/g, ( '-' ) x $len )[ 0 .. $len - 1 ]; > > print OUTFILE " @char $name\n"; > > } > > > > close INFILE; > > close OUTFILE; > > > > __END__ > > Yeah, the parameters keep changing because my buddy and I had > incorrectly remembered the format it was supposd to be (several times). If you think it's hard on your end, the only data I can test on is the data you post here. :-) > Sorry about that. Anyway, what you provided did work with some changes. > the code you sent didn't do anything other than give me the command > promt again - but I managed to get it to work anyway. However, I can't > seem to figure out why I cannot use this line: > > my @char = ( split( // ), ( '-' ) x ( $len - length ) ); split( // ) returns a list of ALL the characters in $_ and the use of length() assumes that ONLY valid characters are in $_ > instead of this line: > > my @char = ( /[a-z]/ig, ( '-' ) x $len )[ 0 .. $len - 1 ]; /[acgt]/g returns a list of ONLY the characters 'a', 'c', 'g' and 't' and using the list slice assumes that there may be invalid characers in $_ > in the script - I get errors ( I mean there are other changes that need > to be made but these lines are my major focus). I just like the way the > first line of code calculates the amount of dashes to add. It's just an > aesthetic thing. :-) It works fine if you KNOW that ONLY valid characters are in $_. > Note I changed it to a-z because we use many other > characters than "atcg", for example "n" means "unkown base". Also, just > do not understand as clearly the second line of code above as I do the > first. From what I can gather you are making, say, 50 dashes and then > "filling in" the dashes that match the charatcers within [a-z] from left > to right as long as there are characters to "fill in" the dashes. Does > that make sense? //g creates a list of valid characters from $_ with $len hyphens appended on the end and that list is sliced to the length of $len. > Anyway, when I add "$/ = '>';" to the original script below I get a ^^^^^^^^^^^^ I see no script below. > contatination error (why?). Basically, I am trying to understand why Did you chomp the input? Did you test for valid data before processing it? > certain bits of code "break" the script and others don't. I find I learn > things better by trying alternate forms of code to figure out > relationships. However, I have been looking through my perl books like > crazy and can't seem to understand some of these relationships. I know > it will take time and experience... I guess I'll pick up another perl > book that provides another perspective. > > Sorry about taking so long with this, I am trying to make an honest > effort to learn. :-) No problem. :-) John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]