Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07 de agosto,2005, 20:05
explorer
Guest
 
Mensajes: n/a
Predeterminado AM/PM

Es muy sencillo, pero hay que tener en cuenta unos detalles:
  • Suponemos que las fechas están en formato anglosajón (mes/dia/año hora:minuto:segundo AM/PM)
    El archivo donde está el origen de los datos se llama archivo.txt
    El archivo resultado estará en un fichero llamado resultado.txt
    Las fechas y tiempos pueden tener ceros en las cifras menores de 9. Así, la una de la madrugada será las 01:00:00 y no las 1:0:0
    Sólo hay que cambiar la fecha que hay al final de la línea.
Entonces el código (uno de los posibles) es este:
Código:
#!/usr/bin/perl

use DateTime;
use Time::ParseDate;

# Para todas las líneas del fichero que pasamos como argumento del programa
# La línea quedará almacena en la variable por defecto $_
while ( <ARGV> )
{
    # Analizamos la línea y nos quedamos con la última parte
    # que es la que parece que vero quería cambiar
    ($tiempo) = $_ =~ /,([^,]+)$/;

    # Convertimos la fecha/hora en segundos desde el epoch
    $segundos = parsedate($tiempo);

    # Si ha fallado la conversión, esa línea es distinta de las demás.
    # Informamos al operador y seguimos con la siguiente
    unless ( defined $segundos )
    {
        print "ERROR: Linea distinta:\n$_\n";
        next;
    }

    # Creamos un objeto Fecha/Hora para que nos ayude en la conversión
    $dt = DateTime->from_epoch (
            epoch=>$segundos,
            time_zone=>"local"
    );

    # Creamos la nueva fecha, sin el AM/PM
    $nueva = $dt->strftime("%m/%d/%Y") . ' ' . $dt->hms;

    # Modificamos la línea con la nueva fecha
    $_ =~ s/,[^,]+$/,$nueva/;

    # Sacamos el resultado al exterior
    print "$_\n";
}
Y lo ejecutaríamos como:
Código:
programa.pl archivo.txt > resultado.txt
Quedaría editar el fichero resultado y ver si existen líneas etiquetadas como ERROR, por si acaso.
El resultado del programa sería:
archivo.txt
Código:
38330500,29ba47bb104923102751880e62eeda9d,4/1/2004 1:24:49 AM,4/1/2004 1:24:49 AM
36314924,d9ab3bbc7ef7614b5965b121532161e6,4/1/2004 1:27:45 AM,4/1/2004 1:34:09 AM
36519536,91d10a59ee2971f98d21be0b9b872a97,4/1/2004 1:28:25 AM,4/1/2004 1:33:18 PM
resultado.txt
Código:
38330500,29ba47bb104923102751880e62eeda9d,4/1/2004 1:24:49 AM,04/01/2004 01:24:49
36314924,d9ab3bbc7ef7614b5965b121532161e6,4/1/2004 1:27:45 AM,04/01/2004 01:34:09
36519536,91d10a59ee2971f98d21be0b9b872a97,4/1/2004 1:28:25 AM,04/01/2004 13:33:18
Responder Citando