From ae98925062d5a392a73df4a1456df3a4a3be9b18 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 8 Mar 2013 20:14:51 -0600 Subject: factor common behavior out into a library --- GC.rs | 63 +++++---------------------------------------------------------- 1 file changed, 5 insertions(+), 58 deletions(-) (limited to 'GC.rs') diff --git a/GC.rs b/GC.rs index 62dd706..11f18b3 100644 --- a/GC.rs +++ b/GC.rs @@ -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)); } -- cgit v1.2.3-54-g00ecf