Functionality implemented
This commit is contained in:
@@ -6,3 +6,8 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
serde = { version = "1.0.188", features = ["derive"] }
|
||||||
|
|
||||||
|
|
||||||
|
# serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
||||||
|
|||||||
+12
-4
@@ -21,11 +21,19 @@ fn main() {
|
|||||||
|
|
||||||
myparser.prompt();
|
myparser.prompt();
|
||||||
|
|
||||||
|
println!("\nDumping files");
|
||||||
let rawvalues = myparser.filedump();
|
let rawvalues = myparser.filedump();
|
||||||
|
// myparser.print_values(&rawvalues);
|
||||||
|
|
||||||
let parsed_values = myparser.updatevalues(rawvalues);
|
println!("\nUpdating values");
|
||||||
myparser.removedups(&parsed_values);
|
let parsed_values = myparser.updatevalues(&rawvalues);
|
||||||
|
|
||||||
myparser.print_values(&parsed_values);
|
println!("\nRemoving duplicates");
|
||||||
myparser.save_file(parsed_values);
|
let newupdated = myparser.removedups(&parsed_values);
|
||||||
|
|
||||||
|
println!("\nPrinting values");
|
||||||
|
myparser.print_values(&newupdated);
|
||||||
|
|
||||||
|
println!("\nSaving file");
|
||||||
|
let _result = myparser.save_file(parsed_values);
|
||||||
}
|
}
|
||||||
|
|||||||
+130
-6
@@ -2,7 +2,15 @@
|
|||||||
pub mod parser {
|
pub mod parser {
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{self, BufRead, BufReader};
|
use std::io::{self, BufRead, BufReader};
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
// use serde::{Serialize, Deserialize};
|
||||||
|
use serde::Serialize;
|
||||||
|
use serde::Deserialize;
|
||||||
|
// use std::fs::File;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
|
||||||
|
#[derive(Clone, Deserialize, Serialize)]
|
||||||
pub struct SomeObject {
|
pub struct SomeObject {
|
||||||
pub value: String
|
pub value: String
|
||||||
}
|
}
|
||||||
@@ -27,7 +35,11 @@ pub mod parser {
|
|||||||
value: phonenumber
|
value: phonenumber
|
||||||
};
|
};
|
||||||
|
|
||||||
objs.push(myobj);
|
|
||||||
|
if !myobj.value.is_empty() {
|
||||||
|
// println!("{}", myobj.value);
|
||||||
|
objs.push(myobj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,14 +47,73 @@ pub mod parser {
|
|||||||
return objs;
|
return objs;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn updatevalues(&self, vals: Vec<SomeObject>) -> Vec<SomeObject> {
|
pub fn updatevalues(&self, vals: &Vec<SomeObject>) -> Vec<SomeObject> {
|
||||||
let mut updated: Vec<SomeObject> = vals;
|
let mut updated: Vec<SomeObject> = Vec::new();
|
||||||
|
|
||||||
|
let mut remove_chars: Vec<char> = Vec::new();
|
||||||
|
remove_chars.push(')');
|
||||||
|
remove_chars.push('(');
|
||||||
|
remove_chars.push(' ');
|
||||||
|
remove_chars.push('-');
|
||||||
|
|
||||||
|
let mut i: i32 = 0;
|
||||||
|
|
||||||
|
// let prefix: String = String::from("+1");
|
||||||
|
|
||||||
|
for a in vals {
|
||||||
|
println!("Iter {}", i);
|
||||||
|
|
||||||
|
let mut parsed: String = a.value.clone();
|
||||||
|
if a.value.len() < 2 {
|
||||||
|
println!("{} is an invalid number", a.value);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut pars = self.remove_some_data(&parsed, &remove_chars);
|
||||||
|
parsed.clear();
|
||||||
|
parsed = pars;
|
||||||
|
|
||||||
|
println!("{}", parsed.clone());
|
||||||
|
|
||||||
|
let updated_parsed = self.add_prefix(parsed);
|
||||||
|
|
||||||
|
let myobj: SomeObject = SomeObject {
|
||||||
|
value: updated_parsed.clone()
|
||||||
|
};
|
||||||
|
|
||||||
|
updated.push(myobj);
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn removedups(&self, vals: &Vec<SomeObject>) {
|
pub fn removedups(&self, mut vals: &Vec<SomeObject>) -> Vec<SomeObject> {
|
||||||
println!("Hi");
|
println!("Hi");
|
||||||
|
// let mut tmp: Vec<String> = Vec::new();
|
||||||
|
let mut tmp: HashSet<String> = HashSet::new();
|
||||||
|
//v.retain(|e| set.insert(e.clone()));
|
||||||
|
let mut mm: Vec<SomeObject> = Vec::new();
|
||||||
|
mm = vals.clone();
|
||||||
|
mm.retain(|e| tmp.insert(e.value.clone()));
|
||||||
|
|
||||||
|
// vals.clear();
|
||||||
|
// vals.clear();
|
||||||
|
let mut updated: Vec<SomeObject> = Vec::new();
|
||||||
|
|
||||||
|
for t in tmp {
|
||||||
|
let so: SomeObject = SomeObject {
|
||||||
|
value: t.clone()
|
||||||
|
};
|
||||||
|
|
||||||
|
updated.push(so);
|
||||||
|
}
|
||||||
|
|
||||||
|
// for item in vals {
|
||||||
|
// tmp.push(item.value.clone());
|
||||||
|
// }
|
||||||
|
return updated
|
||||||
}
|
}
|
||||||
pub fn print_values(&self, vals: &Vec<SomeObject>) {
|
pub fn print_values(&self, vals: &Vec<SomeObject>) {
|
||||||
for o in vals {
|
for o in vals {
|
||||||
@@ -50,8 +121,13 @@ pub mod parser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn save_file(&self, vals: Vec<SomeObject>) {
|
pub fn save_file(&self, vals: Vec<SomeObject>) -> std::io::Result<()> {
|
||||||
println!("Hi");
|
let filename: String = String::from("numbers.json");
|
||||||
|
|
||||||
|
let json = serde_json::to_string(&vals).unwrap();
|
||||||
|
let mut file = File::create(filename)?;
|
||||||
|
file.write_all(json.as_bytes())?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,5 +135,53 @@ pub mod parser {
|
|||||||
let file = std::fs::File::open(filename)?;
|
let file = std::fs::File::open(filename)?;
|
||||||
Ok(std::io::BufReader::new(file).lines())
|
Ok(std::io::BufReader::new(file).lines())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn remove_some_data(&self, unparsed: &String, remove_chars: &Vec<char>) -> String {
|
||||||
|
println!("Unparsed: {}", unparsed);
|
||||||
|
|
||||||
|
let mut parsed: String = String::new();
|
||||||
|
|
||||||
|
for i in 0..unparsed.len() {
|
||||||
|
let mychar: char = unparsed.chars().nth(i).unwrap();
|
||||||
|
|
||||||
|
if mychar.is_numeric(){
|
||||||
|
parsed.push(mychar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Parsed: {}", parsed);
|
||||||
|
|
||||||
|
return parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_prefix(&self, raw: String) -> String {
|
||||||
|
let mut mychars = raw.chars().clone();
|
||||||
|
println!("add_prefix");
|
||||||
|
let first_char: char = mychars.nth(0).clone().unwrap();
|
||||||
|
let second_char: char = mychars.nth(1).clone().unwrap();
|
||||||
|
println!("add_prefix");
|
||||||
|
|
||||||
|
let last_char_index = raw.len() - 1;
|
||||||
|
println!("Size {} last index {}", raw.len(), last_char_index);
|
||||||
|
|
||||||
|
// let last_char: char = mychars.nth(last_char_index).clone().unwrap();
|
||||||
|
println!("add_prefix");
|
||||||
|
|
||||||
|
let mut parsed: String = raw.clone();
|
||||||
|
|
||||||
|
if first_char == '1' {
|
||||||
|
parsed.insert(0, '+');
|
||||||
|
} else if first_char != '+' {
|
||||||
|
if second_char != '1' {
|
||||||
|
parsed.insert(0, '+');
|
||||||
|
parsed.insert(1, '1');
|
||||||
|
} else {
|
||||||
|
parsed.insert(0, '+');
|
||||||
|
parsed.insert(1, '1');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parsed
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user