diff options
author | Adam Carpenter <53hornet@gmail.com> | 2019-03-27 15:48:35 -0400 |
---|---|---|
committer | Adam Carpenter <53hornet@gmail.com> | 2019-03-27 15:48:35 -0400 |
commit | e9d1b916708054a354224c6fb9cd85139da47eab (patch) | |
tree | e6992d3483da571c32fe3d59b42a958deda681b5 | |
parent | 67cdcc2e12118becb823e20a40cc2687f2b8425a (diff) | |
download | learning-rust-e9d1b916708054a354224c6fb9cd85139da47eab.tar.xz learning-rust-e9d1b916708054a354224c6fb9cd85139da47eab.zip |
"Finished chapter 2"
-rw-r--r-- | meap/ch2/src/main.rs | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/meap/ch2/src/main.rs b/meap/ch2/src/main.rs index 055ec1c..4d16a7a 100644 --- a/meap/ch2/src/main.rs +++ b/meap/ch2/src/main.rs @@ -3,6 +3,12 @@ extern crate clap; use regex::Regex; use clap::{App, Arg}; +use std::fs::File; +use std::io; +use std::io::BufReader; +use std::io::prelude::*; + + //use std::ops::{Add}; fn main() { @@ -69,25 +75,40 @@ fn main() { .help("the pattern to search for") .takes_value(true) .required(true)) + .arg(Arg::with_name("input") + .help("file to search") + .takes_value(true)) .get_matches(); let pattern = args.value_of("pattern").unwrap(); let re = Regex::new(pattern).unwrap(); - let quote = "Every face, every shop, bedroom window, public-house, \ - and\ndark square is a picture feverishly turned--in search \ - of what?\nIt is the same with books. What do we seek through \ - millions of pages?"; - for (index, line) in quote.lines().enumerate() { - match re.find(line) { + let input = args.value_of("input").unwrap_or("-"); + + if input == "-" { + let stdin = io::stdin(); + let reader = stdin.lock(); + process_lines(reader, re); + } + else { + let file = File::open(input).unwrap(); + let reader = BufReader::new(file); + process_lines(reader, re); + } + +} + +fn process_lines<T: BufRead + Sized>(reader: T, re: Regex) { + for line_ in reader.lines() { + let line = line_.unwrap(); + + match re.find(&line) { Some(_) => print!("-> "), None => print!(" "), }; - let line_num = index + 1; - println!("{}: {}", line_num, line); + println!("{}", line); } - } //fn add<T: Add<Output = T>>(i: T, j: T) -> T { |