• Publicidad

Filtrar archivos METAR

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Filtrar archivos METAR

Notapor enric73 » 2013-08-15 05:29 @270

Una vez más, muchas gracias, explorer.

Voy a añadir también el campo de weather. Haré lo mismo: que si no hay -Ra, o -TSRA, -SN, FOG, pues me ponga 'SIN METEORO', o algo similar, gracias...

Saludos
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Filtrar archivos METAR

Notapor enric73 » 2013-08-15 13:08 @589

Hola, explorer.

He estado haciendo pruebas para guardar también en el formato de salida el campo "weather", -RA,-DZ,-TSRA... y en el caso de que no muestre un meteoro, que igualmente relleno el campo, pero me sale por pantalla la información de array(número)...

He añadido al código anterior:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $Meteor  = $metar->weather();
  2. if (!$Meteor) {
  3. $Meteor = 'NO';
  4.         }
  5.  
  6.  
  7. my $viento = $metar->wind() // ${$metar->tokens}[2];    # esto... no es del todo bueno hacerlo así
  8.      
  9. say
  10. join " ",
  11. $metar->SITE(),
  12. $metar->date_time(),
  13. $viento,
  14. $Meteor,
  15. #$metar->weather(),
  16. $cielo,
  17. $metar->temp_dew(),
  18. 'Q' . $metar->pressure(),
  19. ;
  20.      
  21.     $m = $metar;                        # lo guardamos en el mismo array, para luego hacer el Dumper
  22. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


y también aparece comentado la prueba directa de metar->weather(), pero el resultado que me da es el siguiente, para estos metars:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
LEBL 151330Z 14008KT 9999 FEW026 BKN030 28/18 Q1018 NOSIG
LEMD 151330Z 19004KT 9999 SCT065 35/10 Q1018 NOSIG
LEGE 151330Z 19008KT 130V260 9999 FEW045 29/16 Q1018
LEPA 151330Z 23012KT 9999 FEW030 30/18 Q1018 NOSIG
EHGG 151325Z AUTO 22008KT 200V260 6000 -DZ FEW009 BKN011 BKN015CB 17/16 Q1019
  TEMPO 6000 RADZ SCT012 BKN018
EICK 151330Z 22020KT 9999 -RA BKN005 BKN012 17/17 Q1012 NOSIG
EIDW 151330Z 20010KT 8000 -RA FEW012 BKN025 BKN050 18/17 Q1011 NOSIG
EINN 151330Z 18012KT 3000 -RADZ OVC007 18/18 Q1010 NOSIG
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[enric@localhost ~]$ ./metarexplorer.pl
LEBL 151330Z 14008KT ARRAY(0x85a14f8) FEW026-BKN030 28/18 Q1018
LEMD 151330Z 19004KT ARRAY(0x877b688) SCT065 35/10 Q1018
LEGE 151330Z 19008KT ARRAY(0x87cc0d0) FEW045 29/16 Q1018
LEPA 151330Z 23012KT ARRAY(0x87cc540) FEW030 30/18 Q1018
EHGG 151325Z 22008KT ARRAY(0x87cc9b0) FEW009-BKN011-BKN015CB 17/16 Q1019
TEMPO  6000 ARRAY(0x87ced00) NSC  Q
EICK 151330Z 22020KT ARRAY(0x87cf220) BKN005-BKN012 17/17 Q1012
EIDW 151330Z 20010KT ARRAY(0x87cf6f0) FEW012-BKN025-BKN050 18/17 Q1011
EINN 151330Z 18012KT ARRAY(0x87cfbf0) OVC007 18/18 Q1010
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Aparece por pantalla en vez del meteoro (weather) cositas como ARRAY(0x85a14f8)... ¿en qué me equivoco?

Gracias
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Filtrar archivos METAR

Notapor explorer » 2013-08-15 13:20 @597

Lo pone en el manual. Dice que weather() devuelve un array. Mejor dicho, una referencia a un array, así que estamos en la misma situación que tokens().

Este es el cambio que debes hacer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $Meteor = join '-', @{$metar->weather());
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Filtrar archivos METAR

Notapor enric73 » 2013-08-16 05:33 @273

Gracias, explorer, también he visto que el weather_log devuelve una referencia a un array
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
WEATHER

    Current weather (array)
WEATHER_LOG

    Current weather log (array)
SKY

    Current cloud cover (array)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Filtrar archivos METAR

Notapor explorer » 2013-08-16 11:07 @505

Yo lo que hice fue el Dumper, y así vi los campos que me interesaban. Y si eran escalares o arrays.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Filtrar archivos METAR

Notapor enric73 » 2013-09-25 05:06 @254

Hola.

En el código de filtrar METAR, después de say() y join(), querría poner un protocolo de seguridad, y que solamente salgan por pantalla o se guarden en un archivo de salida, los metar que tengan 7 campos separados por un espacio... los demás no los quiero... he probado de añadir el siguiente código pero no me funciona ...

my @fields = split (" ",$m);
my $numfields = scalar(@fields);
print $line."\n" if ($numfields eq 7);


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. say
  2.     join " ",
  3.     $metar->SITE(),
  4.     $metar->date_time(),
  5.     $viento,
  6.     $Meteor,
  7.  
  8.     #$metar->weather(),
  9.     $cielo, $metar->temp_dew(), 'Q' . $metar->pressure(),
  10.     ;
  11.     $m = $metar;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Cómo debo introducirlo en el código para que cuando el programa llegue a say(), cuente los campos y solamente aparezca en pantalla los metar con 7 campos...? Gracias.
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Filtrar archivos METAR

Notapor explorer » 2013-09-25 05:28 @269

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @fields = (
  2.     $metar->SITE(),
  3.     $metar->date_time(),
  4.     $viento,
  5.     $Meteor,
  6.     #$metar->weather(),
  7.     $cielo, $metar->temp_dew(), 'Q' . $metar->pressure(),
  8. );
  9.  
  10. say join " ", @fields if @fields == 7;
  11.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Filtrar archivos METAR

Notapor enric73 » 2013-09-25 07:58 @373

Gracias,

le he añadido $outfile para salvarlo a un archivo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. say $outfile join " ", @fields if @fields == 7;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados