Optimised args with iterator and search functions with iterator

This commit is contained in:
Piyush मिश्रः 2020-05-06 19:42:27 +05:30
parent ffac6a0f03
commit 0055b3553d
4 changed files with 47 additions and 35 deletions

11
.project Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>minigrep</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View File

@ -1,4 +1,4 @@
Jai Sri Ram
Jai Hanuman
Ram ka Mandir ban raha hai
Hanuman Ram Bhakt hai
Hanuman ram Bhakt hai

View File

@ -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>) {

View File

@ -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);
}
}