diff --git a/TODO b/TODO index 9a61e12..db6dd5d 100644 --- a/TODO +++ b/TODO @@ -8,6 +8,3 @@ Technical: Documentation: - Write man page - Create `help` option - -Interface: - - Option to import numbers from a file (exports with piping) diff --git a/src/main.rs b/src/main.rs index 1c82b57..19a064d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,17 +16,18 @@ * along with this program. If not, see . */ -//use std::env; use structopt::StructOpt; use std::path::PathBuf; +use std::fs::File; +use std::io::{BufRead, BufReader}; use std::collections::VecDeque; #[derive(StructOpt)] struct Opt { #[structopt(short, long)] verbose:bool, - //#[structopt(short, long)] - //import:Option, + #[structopt(short, long)] + import:Option, n:usize, } @@ -36,14 +37,31 @@ fn main() { // get the first `n` primes let n = opts.n; let mut primes:VecDeque = VecDeque::with_capacity(n); - // first prime - if opts.verbose - { - println!("{}", 2); - } - primes.push_back(2); + let mut candidate:u64; - let mut candidate:u64 = 3; + if opts.import.is_some() + { + let in_file = File::open(opts.import.unwrap()).unwrap(); + let reader = BufReader::new(in_file); + for (index, line) in reader.lines().enumerate() + { + let line = line.unwrap(); + let aux:u64 = line.parse().unwrap(); + primes.push_back(aux); + } + + candidate = *primes.back().unwrap() + 2; + } + else + { + // first prime + if opts.verbose + { + println!("{}", 2); + } + primes.push_back(2); + candidate = 3; + } while primes.len() < n { @@ -71,6 +89,6 @@ fn main() { if !opts.verbose { - println!("{}", primes.back().unwrap()); + println!("{}", primes.get(n-1).unwrap()); } }