Optimised args with iterator and search functions with iterator
This commit is contained in:
parent
ffac6a0f03
commit
0055b3553d
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>minigrep</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
Jai Sri Ram
|
||||
Jai Hanuman
|
||||
Ram ka Mandir ban raha hai
|
||||
Hanuman Ram Bhakt hai
|
||||
Hanuman ram Bhakt hai
|
||||
|
|
|
|||
63
src/lib.rs
63
src/lib.rs
|
|
@ -8,25 +8,34 @@ pub struct Configs {
|
|||
}
|
||||
|
||||
impl Configs {
|
||||
pub fn new(args: &Vec<String>) -> Result<Configs, &'static str> {
|
||||
pub fn new(args: &mut std::env::Args) -> Result<Configs, &'static str> {
|
||||
if args.len() < 3 {
|
||||
return Err("\
|
||||
minigrep [pattern] [filename] case
|
||||
adding \"case\" is optional to enable case sensitive grep");
|
||||
}
|
||||
|
||||
let mut is_sensitive = false;
|
||||
|
||||
if let Some(o) = args.get(3) {
|
||||
if o == "case" {
|
||||
is_sensitive = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
args.next();
|
||||
|
||||
let pattern = match args.next() {
|
||||
Some(arg) => arg,
|
||||
None => return Err("Pattern Not got")
|
||||
};
|
||||
|
||||
let filename = match args.next() {
|
||||
Some(arg) => arg,
|
||||
None => return Err("Filenane Not got")
|
||||
};
|
||||
|
||||
let is_case_sensitive = match args.next() {
|
||||
Some(arg) => arg == "case",
|
||||
None => false
|
||||
};
|
||||
|
||||
Ok(Configs {
|
||||
pattern: args[1].clone(),
|
||||
filename: args[2].clone(),
|
||||
is_case_sensitive: is_sensitive,
|
||||
pattern,
|
||||
filename,
|
||||
is_case_sensitive,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -44,27 +53,19 @@ pub fn run(conf: Configs) -> Result<(), Box<dyn Error>> {
|
|||
}
|
||||
|
||||
pub fn search_case_sensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
|
||||
let mut vec: Vec<&'a str> = vec![];
|
||||
|
||||
for line in contents.lines() {
|
||||
if line.contains(pattern) {
|
||||
vec.push(line);
|
||||
}
|
||||
}
|
||||
|
||||
vec
|
||||
contents.lines()
|
||||
.filter(
|
||||
|lin| lin
|
||||
.contains(&pattern))
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn search_case_insensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
|
||||
let mut vec: Vec<&'a str> = vec![];
|
||||
let pattern = pattern.to_lowercase();
|
||||
|
||||
for line in contents.lines() {
|
||||
if line.to_lowercase().contains(&pattern) {
|
||||
vec.push(line);
|
||||
}
|
||||
}
|
||||
vec
|
||||
contents.lines()
|
||||
.filter(
|
||||
|lin| lin.to_lowercase()
|
||||
.contains(&pattern.to_lowercase()))
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn print_output(out: Vec<&str>) {
|
||||
|
|
|
|||
|
|
@ -2,15 +2,15 @@ use std::env;
|
|||
use std::process;
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let mut args = env::args();
|
||||
|
||||
let conf = minigrep::Configs::new(&args).unwrap_or_else(|err| {
|
||||
let conf = minigrep::Configs::new(&mut args).unwrap_or_else(|err| {
|
||||
eprintln!("{}", err);
|
||||
process::exit(1);
|
||||
});
|
||||
|
||||
if let Err(e) = minigrep::run(conf) {
|
||||
eprintln!("Error: {}", e);
|
||||
process::exit(0);
|
||||
process::exit(1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue