944,161 Members | Top Members by Rank

Ad:
  • Perl Discussion Thread
  • Unsolved
  • Views: 16497
  • Perl RSS
Feb 23rd, 2007
0

How to skip a line !

Expand Post »
Hi :-|

I am workning on a projekt based on DNA sequences in Perl. I wanna make a program that reverse complements the DNA sequence and writes it into a file fx. revdna.fsa (Which I have done ) but the problem is that I want to keep the first unaltered because it's just a description line and therefore has to stay that way even though I change the lines after it.
Also If I wanna keep the first line AND add some more text to the first line-how do I do that???

This is a DNA seqeunce taken from the GenBank database. (the first line is not part of the sequence and is the line I wanna keep as it is)

>AB000410 1559 bp mRNA Homo sapiens
GAGAAGATAAGTCGCAAGGAGGGGGCGGGACCCACACCTCAGGAAAGCCGGAGAATTGGG
GCACGCAAGCGGGGGGGCTTTGATGACCCCCCAAAGGGCGAGGCATGCAGGAGGTGGAGG
AATTAAGTGAAACAGGGAAGGTTGTTAAACAGCACCGTGTGGGCGAGGCCTTAAGGGTCG
TGGTCCTCGTCTGGGCGGGGTCTTTGGGCGTCGACGAGGCCTGGTTCTGGGTAGGCGGGG
CTACTACGGGGCGGTGCCTGCTGTGGAAATGCCTGCCCGCGCGCTTCTGCCCAGGCGCAT
GGGGCATCGTACTCTAGCCTCCACTCCTGCCCTGTGGGCCTCCATCCCGTGCCCTCGCTC
TGAGCTGCGCCTGGACCTGGTTCTGCCTTCTGGACAATCTTTCCGGTGGAGGGAGCAAAG
TCCTGCACACTGGAGTGGTGTACTAGCGGATCAAGTATGGACACTGACTCAGACTGAGGA
GCAGCTCCACTGCACTGTGTACCGAGGAGACAAGAGCCAGGCTAGCAGGCCCACACCAGA
CGAGCTGGAGGCCGTGCGCAAGTACTTCCAGCTAGATGTTACCCTGGCTCAACTGTATCA
CCACTGGGGTTCCGTGGACTCCCACTTCCAAGAGGTGGCTCAGAAATTCCAAGGTGTGCG


I have done this so far:

open(IN, '<',"dna.dat") or die "Can't read file\n $!";
$dna = "";
while(defined($line=<IN>)){
chomp $line;
$dna .= $line;
}
close IN;

$cdna = "";
for($i=0; $i < length($dna); $i++){
$base =substr($dna, $i, 1);

if($base eq "A"){
$base= "T";
}
elsif($base eq "T"){
$base="A";
}
elsif($base eq "C"){
$base= "G";
}
elsif($base eq "G"){
$base= "C";
}
else {
die "Unknown base; $base\n";
}
$cdna .= $base;
}


$rdna = "";
for($i=-1; $i >= -length($cdna); $i--){

$base =substr($cdna, $i, 1);

$rdna .= $base;
}

)
print "The DNA string is now reversed complemented: $rdna\n";


__END__

here the file "dna.dat" containe the DNA sequence without the first line.

hope u can help me to skipt the first line
Similar Threads
Reputation Points: 10
Solved Threads: 0
Light Poster
MojoS is offline Offline
31 posts
since Feb 2007
Feb 23rd, 2007
0

Re: How to skip a line !

Say your data is in a variable called $page. You can use the split function to split on the first line break only and then only apply your data processing code to the text that appears after that. Take a look at this:

perl Syntax (Toggle Plain Text)
  1. @stuff = split(/\\n/, $page, 2);

You can find out how the split function works here:

http://perldoc.perl.org/functions/split.html

In the example I have given above, the data in the variable $page after the first line break is put into $stuff[1]. Remember, some characters (including \ ) have special meanings when used inside a regular expression (//) and therefore need to be escaped with a \ . It would be useful to give this page about regular expressions a good read if you haven't yet:

http://perldoc.perl.org/perlretut.html

I hope this helps.

Steven.
Last edited by Mushy-pea; Feb 23rd, 2007 at 9:28 am.
Reputation Points: 47
Solved Threads: 1
Posting Whiz in Training
Mushy-pea is offline Offline
271 posts
since Jun 2006
Feb 24th, 2007
1

Re: How to skip a line !

Perl Syntax (Toggle Plain Text)
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open(IN, '<',"dna.dat") or die "Can't read file\n $!";
  5. my $first_line = <IN>;
  6. my $dna = '';
  7. while(my $line=<IN>){
  8. chomp $line;
  9. $dna .= $line;
  10. }
  11. close IN;
  12. my $cdna = '';
  13. for my $i (0 .. length($dna)-1){
  14. $_ = substr($dna, $i, 1);
  15. if (!/[TAGC]/) {die "Unkown base: '$_'\n";}
  16. $cdna .= ($_ eq 'A') ? 'T' :
  17. ($_ eq 'T') ? 'A' :
  18. ($_ eq 'C') ? 'G' :
  19. ($_ eq 'G') ? 'C' : '';
  20. }
  21. my $rdna = reverse $cdna;
  22. print "The DNA string is now reversed complemented:\n\n $first_line\n$rdna\n";
Reputation Points: 246
Solved Threads: 67
Practically a Posting Shark
KevinADC is offline Offline
898 posts
since Mar 2006
Feb 24th, 2007
0

Re: How to skip a line !

this line:

$rdna = reverse $cdna;

should be:

my $rdna = reverse $cdna;
Reputation Points: 246
Solved Threads: 67
Practically a Posting Shark
KevinADC is offline Offline
898 posts
since Mar 2006
Feb 25th, 2007
0

Re: How to skip a line !

Hi guys ....

Thanxs alot for ur big help!
Kevin I have tried the following but when I want to write the data into a file I get problems with displaying the first line without repeating itself for every new data line (because of loop):
How do I display the first line only once and followed by the dataset

I have tried this:

open(IN, '<',"dna.fsa") or die "Can't read file\n $!";
my $first_line = <IN>;
my $dna = '';
while(my $line=<IN>){
chomp $line;
$dna .= $line;
}
close IN;


$cdna = "";
for($i=0; $i < length($dna); $i++){
$base =substr($dna, $i, 1);

if($base eq "A"){
$base= "T";
}
elsif($base eq "T"){
$base="A";
}
elsif($base eq "C"){
$base= "G";
}
elsif($base eq "G"){
$base= "C";
}
else {
die "Unknown base; $base\n";
}
$cdna .= $base;
}

my $rdna = reverse $cdna;

substr($first_line, -1, 0)= "ComplementStrand";

open(OUT,'>' , "revdna.fsa") or die "Can't write file\n $!";

for($i=0; $i < length($rdna);$i+=60){
$base =substr($rdna, $i, 60);
print OUT "$base\n";
}
close OUT;

print "The DNA in FASTA format is now reversed complemented: \n", "$first_line $rdna\n";

as you can see here I only got the DNA sequence writing in the revdna.fsa, what should I do to display the first line followe by the given string ...!

Thanx
Reputation Points: 10
Solved Threads: 0
Light Poster
MojoS is offline Offline
31 posts
since Feb 2007
Feb 25th, 2007
0

Re: How to skip a line !

print it outside the loop.

Perl Syntax (Toggle Plain Text)
  1. open(OUT,'>' , "revdna.fsa") or die "Can't write file\n $!";
  2. print OUT "$first_line\n";
  3. for($i=0; $i < length($rdna);$i+=60){
  4. $base =substr($rdna, $i, 60);
  5. print OUT "$base\n";
  6. }
  7. close OUT;
Reputation Points: 246
Solved Threads: 67
Practically a Posting Shark
KevinADC is offline Offline
898 posts
since Mar 2006
Feb 25th, 2007
0

Re: How to skip a line !

Hmmm I had tried that, and its still wouldnt work when I nedit revdna.dat, only the sequence is showing!!!!!
the first line apperently cant be seen in the texteditor .....!
Reputation Points: 10
Solved Threads: 0
Light Poster
MojoS is offline Offline
31 posts
since Feb 2007
Feb 26th, 2007
0

Re: How to skip a line !

hard to say why it's not working because in the code you posted it never prints $first_line to a file and you print to a file called "revdna.fsa" but then in your last post you mention "revdna.dat".

This line in your last code post:

substr($first_line, -1, 0)= "ComplementStrand";

is simpler written as:

$first_line .= "ComplementStrand";
Reputation Points: 246
Solved Threads: 67
Practically a Posting Shark
KevinADC is offline Offline
898 posts
since Mar 2006

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Perl Forum Timeline: Difference between tr and s
Next Thread in Perl Forum Timeline: updating fields in MS Access





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC