diff options
Diffstat (limited to 'GC.rs')
-rw-r--r-- | GC.rs | 63 |
1 files changed, 5 insertions, 58 deletions
@@ -1,59 +1,6 @@ -use io::{println,stdin,Reader,ReaderUtil}; -use str::{push_str,unshift_char,each_char,len}; - -const EOF: char = -1 as char; - -struct FASTAReader { - in: Reader, - priv mut peeked: char, -} - -impl FASTAReader { - static fn new() -> FASTAReader { - FASTAReader { in: stdin(), peeked: EOF } - } - - fn read_line(&self) -> ~str { - let mut line = self.in.read_line(); - if self.peeked != '>' { - unshift_char(&mut line, self.peeked); - } - self.peeked = self.in.read_char(); - line - } - - fn read_sequence(&self) -> (~str, ~str) { - if self.peeked == EOF { - self.peeked = self.in.read_char(); - } - - let name = self.read_line(); - let mut dna = ~""; - while !self.in.eof() && self.peeked != '>' { - let line = self.read_line(); - push_str(&mut dna, line); - } - (name, dna) - } - - fn each_sequence(&self, cb: fn(~str, ~str) -> bool) { - while !self.in.eof() { - let (name, dna) = self.read_sequence(); - cb(name, dna); - } - } -} - -pure fn gc_content(dna: ~str) -> float { - let mut content = 0; - for each_char(dna) |ch| { - match ch { - 'C' | 'G' => content += 1, - _ => (), - } - } - (content as float) / (len(dna) as float) -} +extern mod rosalind; +use rosalind::dna::gc_content; +use rosalind::fasta::FASTAReader; fn main() { let reader = FASTAReader::new(); @@ -65,6 +12,6 @@ fn main() { max_name = name; } } - println(max_name); - println(fmt!("%.6f", max_gc * 100f)); + io::println(max_name); + io::println(fmt!("%.6f", max_gc * 100f)); } |