pub mod fasta_sequences_read { use std::env; use std::fs::File; use std::io::{BufRead, BufReader}; use std::str; use std::io::Lines; pub fn open_sequences_file() { let args: Vec = env::args().collect(); let bank_filename = args[1].clone(); let f_bank = File::open(bank_filename).expect("Fichier non trouvé !"); read_sequences(f_bank); } fn print_seq(sequence: &(String, Vec)) { println!("Ident : {}", sequence.0); let sequence_str = str::from_utf8(&sequence.1).unwrap().to_string(); println!("Séquence : {}", &sequence_str); } fn read_sequences(f: File) { let fb = BufReader::new(&f); let mut lines = fb.lines(); let mut count: u8 = 0; let mut ident = String::new(); loop { let sequence = get_sequence(&mut count, &mut ident, &mut lines); if sequence.1.len() == 0 { break} else { print_seq(&sequence); } } } fn get_sequence(count: &mut u8, ident: &mut String, lines: &mut Lines) -> (String, Vec) { let mut sequence: (String, Vec) = (String::new(), vec![]); let mut sequence_nuc: Vec = vec![]; for line in lines { let the_line = line.unwrap(); if the_line.len() > 0 { let first = &the_line[0..1]; match first { first if first == ">" => { if *count == 0 { *ident = the_line.clone(); *count += 1; } else { sequence = (ident.to_string(), sequence_nuc.clone()); println!("Numéro : {}", count); *ident = the_line.clone(); sequence_nuc = vec![]; *count += 1; return sequence; } } first if first != ">" => { sequence_nuc.extend(the_line.as_bytes())} &_ => {} } } } sequence = (ident.to_string(), sequence_nuc.clone()); println!("Numéro : {}", count); sequence } }