por boligan » 2017-12-08 12:18 @554
Hola.
Bueno, explorer, como te comenté anteriormente el error me lo da cuando trata de leer el xml que le corresponde a la última línea del csv.
Aquí te pongo todo el código completo. Si puedes tírale un vistazo y dime qué ves mal. Yo estoy comenzando con Perl y realmente no me doy cuenta dónde está el error. Gracias por tu paciencia.
#use strict;
#use warnings;
#######################################################
# Recupera los nombres de archivos y directorios dentro de una ruta
#######################################################
##---PARA CARGAR Y CREAR FILE---
$carpeta="D:/Proyecto-OBS-DB";
$file="$carpeta/PasoRealdeSanDiego-1970-2015-Trihorario-csv-2010.csv";
#####DEFINICIONES ARREGLOS#############################
@hora=("00","03","06","09","12","15","18","21");
@mes=("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
@est_name=("Cabo de San Antonio","La Bajada","Santa Lucia","Isabel Rubio","San Juan y Martinez","Pinar del Rio","La Palma","Paso Real de San Diego");
@var_name=("Estacion","Ano","Mes","Dia","Hora","Nubosidad","CantNubesClCm","AlturaNubeClCm","TipoNubesCl","TipoNubesCm","TipoNubesCh","DireccionViento","FuerzaViento","Visibilidad","TiempoPresente","TiempoPasado1","TiempoPasado2","PresionEstacion","PresionMar","CaracteristicaCurva","TendenciaBarometrica","TemperaturaSeca","TemperaturaHumeda","TensionVaporAgua","HumedadRelativa","DeficitSaturacion","PuntoRocio","Precipitacion","TemperaturaSuelo","Rocio","TemperaturaMinima6Horas","TemperaturaMaxima6Horas","Insolacion","Evaporacion","DireccionCl","DireccionCm","DireccionCh","EstadoCieloTropicos","EstadoSuelo","Bruma","Neblina","Niebla","Llovizna","Lluvia","Chubasco","Tormenta","Tornado","Granizo","CambioTemperatura","TiempoCambioTemperatura","GeneroNubesDesarrolloVertical","DireccionNubesDesarrolloVertical","AnguloElevacionNubesDesarrolloVertical","NubosidadCapa1","GeneroNubesCapa1","AlturaNubesCapa1","NubosidadCapa2","GeneroNubesCapa2","AlturaNubesCapa2","NubosidadCapa3","GeneroNubesCapa3","AlturaNubesCapa3","NubosidadCapa4","GeneroNubesCapa4","AlturaNubesCapa4");
#######################################################
open (ENTRADA,"<$file") || die "ERROR: No abre fichero de entrada $carpeta\n";
##---MAIN PROGRAM---
FINAL: while($fichero=<ENTRADA>){ # lee una línea del archivo
next if $fichero =~ m{^[\#]};
next if $fichero =~ m{^Estacion};
# final obs
if ($fichero =~ m/^([7][8][3][1][0-7])/){
leer_csv();
print "$valores_temp[1]-$valores_temp[2]\n";
# si el fichero existe, escribo, sino lo creo
$salida="$carpeta/$anocsv-$mescsv.xml";
if (-e $salida) {
open (SALIDA,">>$salida") || die "ERROR: No abre fichero de salida $salida\n";
print "EXISTE-$salida\n";
compara_csv_xml();
}else{
open (SALIDA,">$salida") || die "ERROR: No abre fichero de salida $salida\n";
print SALIDA "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Pinar>\n";
print "NO EXISTE-$salida\n";
llena_datos();
}
}
}
principio_y_final();
close (ENTRADA);close (SALIDA);
##---MAIN PROGRAM---
sub llena_datos {
for $j(0..$#var_name){
push @valor,"$var_name[$j]=\"$valores_temp[$j]\"";
}
$head=(" <Data ");# inicio obs
$end=(" />\n");
$archivo_valores="$head@valor$end"; # obs completa
print SALIDA $archivo_valores;
return @valor;
}
sub leer_csv{
@valores_temp=();@valor=();
@valores_temp=split(/[,]|\n$/,$fichero);
$estacioncsv=$valores_temp[0];
$anocsv=$valores_temp[1];
$mescsv=$valores_temp[2];
$diacsv=$valores_temp[3];
$horacsv=$valores_temp[4];
return;
}
sub leer_xml{
@valores_temp_xml=();
@valores_temp_xml=split(/\s+/,$ficheroxml,8);
$estacionxml=substr($valores_temp_xml[2],10,5);
$anoxml=substr($valores_temp_xml[3],5,4);
$mesxml=substr($valores_temp_xml[4],5,2);
$diaxml=substr($valores_temp_xml[5],5,2);
$horaxml=substr($valores_temp_xml[6],6,1);
return;
}
sub compara_csv_xml {
my $entradaxml=$salida;
open (ENTRADAXML,"<$entradaxml") || die "ERROR: No abre fichero de entrada $entradaxml\n";
while($ficheroxml=<ENTRADAXML>){ # lee una línea del archivo
if ($ficheroxml =~ m/<Data/){
@valores_temp_xml=();#print "hola-compara-$ficheroxml";
@valores_temp_xml=split(/\s+/,$ficheroxml,8);
$estacionxml=substr($valores_temp_xml[2],10,5);
$anoxml=substr($valores_temp_xml[3],5,4);
$mesxml=substr($valores_temp_xml[4],5,2);
$diaxml=substr($valores_temp_xml[5],5,2);
$horaxml=substr($valores_temp_xml[6],6,1);
#print "comparo-$estacioncsv-$estacionxml\n";
if ($estacioncsv==$estacionxml&&$diacsv==$diaxml&&$horacsv==$horaxml){
next FINAL;
}
}
}
llena_datos();
return;
}
sub principio_y_final {
# foreach (glob("$carpeta/*.xml")){
# @file_full=();
# print "encabeza-$_\n";
# $file_entrada=$_;
# $file_salida="$_.old";
# rename $file_entrada, $file_salida;
# open (IN,"<$file_salida") || die "ERROR: No abre fichero de entrada $!\n";
# open (OUT, ">$file_entrada") || die "ERROR: No abre fichero de salida $!\n";
# while($file=<IN>){ # lee una línea del archivo
# if ($file!~ m/<\/Pinar\>/){
# push @file_full,$file;
#print $file;
# }
# }
#print "@file_full";
# print OUT @file_full;
# print OUT "</Pinar>\n";
# close IN;
# close OUT;
# unlink $file_salida;
# my $num_removed = unlink $file_salida;
# print "$num_removed-files were removed\n";
# }
# return ;
for my $archivo_entrada (glob("$carpeta/2222-01.xml")) {
#my $archivo_nuevo = "$archivo_entrada.new";
my $archivo_viejo = "$archivo_entrada";
print "encabeza-$archivo_entrada\n";
#print "encabeza-$archivo_nuevo\n";
#chdir $carpeta or die "ERROR: No puedo entrar en el $carpeta: $!\n";
#print rename $archivo_nuevo, $archivo_viejo; # nuevo => viejo
#rename $archivo_viejo, $archivo_nuevo or die "ERROR al renombrar: $!\n";
open (IN,"<$archivo_viejo") or die "ERROR: No abre archivo de entrada $archivo_viejo: $!\n";
print "PRUEBA-1\n";
open my $OUT, '>', $archivo_nuevo or die "ERROR: No abre archivo de salida $archivo_nuevo: $!\n";
# if (! -e $archivo_entrada) {
# die "ERROR: el archivo $archivo_entrada existe";
# }
#print <IN>;
@file_full = <IN>;
#while ($linea = <IN>) {
print "PRUEBA-2\n";# lee una línea del archivo
# if ( $linea =~ m{</Pinar>} ) { # si es la marca que buscamos
# print $OUT "nueva información\n"; # insertamos la nueva información
# }
#print $linea;
# print $OUT $linea; # copiamos la línea leída al archivo de salida
#}
print "@file_full\n";
#print $OUT "</Pinar>\n";
close (IN);
close $OUT;
#print "$archivo_viejo\n";
#unlink $archivo_entrada; # borro los ficheros .old
}
return;
}
- Adjuntos
-
- PasoRealdeSanDiego-1970-2015-Trihorario-csv-2010.csv
- (1.97 KiB) 180 veces