• Publicidad

Parseando CSV

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

Re: Parseando CSV

Notapor explorer » 2012-11-25 17:52 @786

La regla básica es que cualquier intercambio de información entre máquinas debe realizarse con los protocolos más sencillos y estándares posibles. Si la fecha está en formato ISO8601, le será fácil para otra máquina o proceso el leerla y tratarla.

Otro asunto es que necesitemos esa fecha en un formato que vaya a leer un ser humano. Pero un ser humano no va a leer un XML (bueno, a lo mejor tutoki sí ;) ) En ese caso, podemos

  • guardar en el XML los dos formatos. El de ISO8601 para que sea interpretable por otro programa, y otro formato más "humano"
  • guardar solo el formato ISO8601 y con otro programa que lea el XML, traducirlo al formato humano, en el momento de sacarlo en pantalla
En el primer caso lo tienes sencillo, porque en el código dispones de todos los componentes por separado, así que solo tienes que conformar una fecha y guardarla como una hoja más en el árbol XML.

En el segundo caso, puedes realizar una conversión sencilla.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use DateTime;
  4. use DateTime::Locale;
  5. use DateTime::Format::ISO8601;
  6. use open qw(:utf8 :std);        # salida en pantalla en formato UTF8
  7.  
  8. ## Creamos un objeto analizar de formato ISO8601
  9. my $iso8601 = DateTime::Format::ISO8601->new();
  10.  
  11. ## Creamos un objeto DateTime a partir del análisis de la fecha en formato ISO8601
  12. my $fecha = DateTime->from_object(
  13.     object => $iso8601->parse_datetime("20121005T100000"),
  14.     locale => 'es_ES',
  15. );
  16.  
  17. ## Creamos un objeto para acceder a los distintos formatos
  18. my $local = DateTime::Locale->load('es_ES');
  19.  
  20. ## Salida en pantalla
  21. say $fecha->format_cldr($local->datetime_format_full());  # viernes 5 de octubre de 2012 10:00:00 floating
  22.  
  23. __END__
Coloreado en 0.003 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

Publicidad

Re: Parseando CSV

Notapor tutoki » 2012-11-27 18:35 @816

Hola,

Realmente lo del formato ISO8601 sería interesante (y creo que obligatorio) si fuera a operar con fechas. En este programa realmente se hacen asignaciones. Aparte no tengo claro (no probado) qué interpretación haría la aplicación que genera gráficos a partir de los XML si se encuentra nomenclaturas de etiqueta no especificas de su API.

De las dos opciones la primera parece la más interesante, aunque no la termino que entender, he realizado una interpretación libre :wink:

(presiento que lo siguiente no te va a parecer muy fino)

He cambiado :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my ( $dia, $mes, $year, $hora, $minuto, $segundo ) = $item->{Timestamp} =~ /(\d+)/g;
  2.         $item->{Timestamp} = sprintf "%02d%02d%02dT%02d%02d%02d", $year, $mes, $dia, $hora, $minuto, $segundo;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Que es la parte del código que convertía a formato ISO8601,

por :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my ( $dia, $mes, $year, $hora, $minuto, $segundo ) =
  2.           $item->{Timestamp} =~ /(\d+)/g;
  3.         $item->{Timestamp} = sprintf "%02d"."/"."%02d"."/"."%02d"." "."%02d".":"."%02d".":"."%02d", $year, $mes, $dia,
  4.           $hora, $minuto, $segundo;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


He cambiado fechas, incluido fechas de otros meses, y las ordena bien, no hace falta el formato especifico para ordenar correctamente, cosa que creo que es lógico al ordenar la fecha en formato año,mes,dia,hora,minuto,segundo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1.   <categories>
  2.     <category label="2012/10/05 10:00:00" />
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Queda un poco anglosajón pero al menos es más legible. Para este mes me vale.

Voy a trabajar en la segunda opción. Abriré otro hilo si fuera necesario.

Gracias de nuevo

SALUD...
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 15 invitados

cron