feat: implementar estrutura Pessoa e funções de processamento de arquivos DMED
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
// Exemplo de como usar a lib dmed em um comparador
|
||||
|
||||
use dmed::{processar_arquivo, Pessoa, buscar_por_cpf};
|
||||
use std::collections::HashMap;
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
// Processa dois arquivos diferentes
|
||||
println!("=== COMPARADOR DE ARQUIVOS DMED ===\n");
|
||||
|
||||
let arquivo1 = "LfsIssDmed068325.txt";
|
||||
let pessoas1 = processar_arquivo(arquivo1)?;
|
||||
|
||||
println!("Arquivo 1: {} registros", pessoas1.len());
|
||||
// let pessoas2 = processar_arquivo("arquivo2.txt")?;
|
||||
// println!("Arquivo 2: {} registros\n", pessoas2.len());
|
||||
|
||||
// Cria um mapa de CPF -> Pessoa para busca rápida
|
||||
let mapa1: HashMap<&str, &Pessoa> = pessoas1
|
||||
.iter()
|
||||
.map(|p| (p.cpf.as_str(), p))
|
||||
.collect();
|
||||
|
||||
// Exemplo 1: Buscar CPF específico
|
||||
println!("=== Busca de CPF ===");
|
||||
let cpf_busca = "00276808860";
|
||||
if let Some(pessoa) = buscar_por_cpf(&pessoas1, cpf_busca) {
|
||||
println!("✓ CPF {} encontrado", cpf_busca);
|
||||
println!(" Nome: {}", pessoa.nome);
|
||||
println!(" Valor: R$ {:.2}", pessoa.valor);
|
||||
}
|
||||
|
||||
// Exemplo 2: Comparar valores de mesmos CPFs entre arquivos
|
||||
println!("\n=== Comparação de valores ===");
|
||||
// Simulando segundo arquivo com mesmos CPFs mas valores diferentes
|
||||
let cpfs_exemplo = ["00276808860", "00633999032", "01133252826"];
|
||||
|
||||
for cpf in &cpfs_exemplo {
|
||||
if let Some(p1) = mapa1.get(cpf) {
|
||||
println!("\nCPF: {}", cpf);
|
||||
println!(" Arquivo 1: R$ {:.2}", p1.valor);
|
||||
// if let Some(p2) = mapa2.get(cpf) {
|
||||
// let diferenca = p2.valor - p1.valor;
|
||||
// println!(" Arquivo 2: R$ {:.2}", p2.valor);
|
||||
// println!(" Diferença: R$ {:.2} ({:+.1}%)",
|
||||
// diferenca,
|
||||
// (diferenca / p1.valor) * 100.0
|
||||
// );
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
// Exemplo 3: Encontrar divergências
|
||||
println!("\n=== Análise de divergências ===");
|
||||
let total_registros = pessoas1.len();
|
||||
let com_valor = pessoas1.iter().filter(|p| p.valor > 0.0).count();
|
||||
let sem_valor = total_registros - com_valor;
|
||||
|
||||
println!("Total de registros: {}", total_registros);
|
||||
println!("Com valor: {}", com_valor);
|
||||
println!("Sem valor: {}", sem_valor);
|
||||
|
||||
// Exemplo 4: Top 5 maiores valores
|
||||
println!("\n=== Top 5 maiores valores ===");
|
||||
let mut pessoas_sorted = pessoas1.clone();
|
||||
pessoas_sorted.sort_by(|a, b| b.valor.partial_cmp(&a.valor).unwrap());
|
||||
|
||||
for (i, pessoa) in pessoas_sorted.iter().take(5).enumerate() {
|
||||
println!("{}. {} - R$ {:.2}",
|
||||
i + 1,
|
||||
pessoa.nome,
|
||||
pessoa.valor
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user