Tengo un problemilla y no sé cómo continuar, o más bien, qué es lo que estoy haciendo mal.
Tengo dos ficheros, uno contiene información de personas, como 'dni', 'nombre', etc., en un fichero plano separado por ",". Lo vamos a llamar 'fichero.txt' y el otro solo contiene el DNI. Lo llamamos Dni.txt.
En el primer fichero existen 50 registros y en el segundo fichero 10 registros cuyos DNI aparecen en el fichero primero.
Tengo que quedarme con un fichero que contenga los 40 restantes, es decir, los DNI que no aparezcan en el segundo fichero.
Habrá mil maneras y seguramente más eficaces que la mía. Mi camino ha sido meter los datos de esos fichero en dos arrays, recorrerlos y comparar. Si existe, no hago nada y si no existen, los guardo en un tercer array que será mi fichero final.
He intentando por medio de arrays, crear una hash de DNI para comparar y no me funciona nada. Si me podéis ayudar, dar unas pautas, indicarme qué es lo que falló. Lo agradezco.
Este es mi código.
Un saludo y muchas gracias.
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $file = 'fichero.txt';
- my $file2 = 'Dni.txt';
- my %dni;
- my @dnis;
- my @fichero;
- my @campo;
- open( my $data2, '<', $file2 ) or die;
- while ( my $nu = <$data2> ) {
- $dni{$nu} = 1;
- @dnis = sort keys %dni;
- }
- open( my $data, '<', $file ) or die;
- while ( my $line = <$data> ) {
- push( @fichero, $line );
- }
- for my $fi (@fichero) {
- @campo = split ",", $fi;
- if ( exists $dni{ $campo[0] } ) {
- print "existe\n";
- }
- else {
- print "no existe\n";
- }
- }
- exit 0;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4