implemented deduplication and deduplicated dictionaty
This commit is contained in:
		
							
								
								
									
										516
									
								
								reparsed.txt
									
									
									
									
									
								
							
							
						
						
									
										516
									
								
								reparsed.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -2,12 +2,19 @@ use std::fs;
 | 
				
			|||||||
use std::fs::OpenOptions;
 | 
					use std::fs::OpenOptions;
 | 
				
			||||||
use std::io::prelude::*;
 | 
					use std::io::prelude::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(PartialEq)]
 | 
				
			||||||
struct Entry {
 | 
					struct Entry {
 | 
				
			||||||
    hieroglyph: String,
 | 
					    hieroglyph: String,
 | 
				
			||||||
    reading: String,
 | 
					    reading: String,
 | 
				
			||||||
    translation: String,
 | 
					    translation: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl std::clone::Clone for Entry {
 | 
				
			||||||
 | 
					    fn clone(&self) -> Self {
 | 
				
			||||||
 | 
					        Self { hieroglyph: self.hieroglyph.clone(), reading: self.reading.clone(), translation: self.translation.clone() }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl std::fmt::Display for Entry {
 | 
					impl std::fmt::Display for Entry {
 | 
				
			||||||
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
 | 
					    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
 | 
				
			||||||
        write!(
 | 
					        write!(
 | 
				
			||||||
@@ -65,13 +72,40 @@ fn read_and_parse(path: &String) -> Vec<Entry> {
 | 
				
			|||||||
    result
 | 
					    result
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn deduplicate (entries: &Vec<Entry>) -> Vec<Entry>{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut deduplicated:Vec<Entry> = Vec::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for entry in entries.iter() {
 | 
				
			||||||
 | 
					        let mut is_dup = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for e in deduplicated.iter() {
 | 
				
			||||||
 | 
					            if e.hieroglyph == entry.hieroglyph {
 | 
				
			||||||
 | 
					                is_dup = true;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if is_dup {
 | 
				
			||||||
 | 
					            let pos = deduplicated.iter().position(|x| x.hieroglyph == entry.hieroglyph).unwrap();
 | 
				
			||||||
 | 
					            deduplicated[pos].translation += &(String::from(" ; ") + &entry.translation);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            deduplicated.push(entry.clone());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    deduplicated
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn import(path: &String) {
 | 
					pub fn import(path: &String) {
 | 
				
			||||||
    let mut output = OpenOptions::new()
 | 
					    let mut output = OpenOptions::new()
 | 
				
			||||||
        .write(true)
 | 
					        .write(true)
 | 
				
			||||||
        .append(true)
 | 
					        .append(true)
 | 
				
			||||||
        .open("./reparsed-test.txt")
 | 
					        .open("./reparsed-test.txt")
 | 
				
			||||||
        .unwrap();
 | 
					        .unwrap();
 | 
				
			||||||
    for entry in read_and_parse(path) {
 | 
					    let dictionary = read_and_parse(path);
 | 
				
			||||||
 | 
					    let dictionary = deduplicate(&dictionary);
 | 
				
			||||||
 | 
					    for entry in dictionary {
 | 
				
			||||||
        if let Err(e) = writeln!(
 | 
					        if let Err(e) = writeln!(
 | 
				
			||||||
            output,
 | 
					            output,
 | 
				
			||||||
            "({}) [{}] {{{}}}",
 | 
					            "({}) [{}] {{{}}}",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user