Estimados:
Navegando por la web buscando solucionar un problema que tengo para crear un par de
shell UNIX y manejar archivos con Perl, dado que el
shell no me sirve para manejar grandes volúmenes de datos de un par de archivos planos.
Ahora bien, mi problema es el siguiente: Buscando aquí vi que hablan del termino
hash. Entiendo que facilita la búsqueda de datos en un archivo. Pues bien mi problema es que tengo dos archivos; uno de 490 000 registros y otro de 290 000 registros; ambos tienen un campo común:
teléfono más dos fechas separadas por ";". Debo extraer el teléfono del archivo 1 que se contenga en el archivo 2 y validar que la primera fecha del archivo 1 sea igual o mayor que la primera fecha del 2, y que la segunda fecha del primer archivo sea igual o mayor que la fecha del segundo archivo; si es así, grabo el teléfono en un archivo 3, cuyo resultado debe ser comparado con otros archivos que contiene números telefónicos.
Traté de implementar un ejemplo que saque de aquí pero no entendí cómo funciona el
hash y cómo accedo a los elementos y cómo recorro el
hash...
Les agradecería alguna orientación al respecto. Desde ya muchas gracias, mi versión de Perl es 5.8.4.
Using perl Syntax Highlighting
#!/usr/bin/perl
#use v5.8.4;
use POSIX qw(strftime);
#use autodie;
#recibe los archivos a procesar como parámetros 1 y 2 y el de salida3 en ARGV[0], [1], [2]
#$archivoPPS=$ARGV[0];
#$arch448=ARGV[1]
#$archInfoBc=ARGV[2]
$VarRuta = "/disk0/gesmdd/pareo/Bases/";
#open my $TMP448, '<', '/disk0/gesmdd/pareo/Bases/paso448.tmp';
#open my $TMPBC, '<', '/disk0/gesmdd/pareo/Bases/pasobc.tmp';
#open my $TMPANI, '>', '/disk0/gesmdd/pareo/Bases/pasoAni448.tmp';
open( TMP448, "/disk0/gesmdd/pareo/Bases/paso448.tmp" ) || print "paso448.tmp\n";
open( TMPBC, "/disk0/gesmdd/pareo/Bases/pasobc.tmp" ) || print "pasobc.tmp\n";
open( TMPANI, "/disk0/gesmdd/pareo/Bases/pasoAni448.tmp" ) || print "pasoAni448.tmp\n";
# 1- Leemos el primer archivo, almacenando la información en el hash
my %archivo1;
while ( my $linea = <$TMP448> ) {
chomp $linea;
# fono FEC INI FEC_FIN
my ( $campo1, $campo2, $campo3 ) = split( ";", $linea );
$archivo1{$campo1} =;
}
# 2- Leemos el segundo archivo, comparando y grabando
while ( my $linea = <$TMPBC> ) {
chomp $linea;
my ( $campo1, undef, $campo3 ) = split( ";", $linea, 4 );
if ( $archivo1{"$campo1"} ) {
printf( "%s;%s;%s", $campos[0], $TMP448{ $campos[0] }, $linea . "\n" );
say $TMPANI $linea;
}
}
close $TMP448;
close $TMPBC;
close $TMPANI;
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Como verán aquí no estoy controlando las fechas dado a que no entiendo cómo tomarlas desde los
hash y aplicar la validación que requiero hacer...