Una idea feliz: Construir una cadena de ordenación de ficheros

En ocasiones, hacemos procesos que generan ficheros de forma masiva. Estos ficheros se acumulan en una ruta especificada y, cuando tenemos que consultarlos, no vemos la forma sencilla de ordenarlos por fecha. Es cierto que una de las propiedades de un fichero es la fecha de modificación pero en ocasiones esta no puede ser del todo fiable. Con esta función, podemos construir fácilmente una cadena que contiene AÑO MES DÍA HORA MINUTO SEGUNDO que resulta ideal para utilizar como nombre de un fichero:


FechaInversa

l_txtAnyo := FORMAT(DATE2DMY(TODAY,3));
l_txtMes := FORMAT(DATE2DMY(TODAY,2));
l_txtDia := FORMAT(DATE2DMY(TODAY,1));

l_txtHoraCompleta := FORMAT(TIME);
l_txtHora := COPYSTR(l_txtHoraCompleta,1,STRPOS(l_txtHoraCompleta,':')-1);

l_txtHoraCompleta := COPYSTR(l_txtHoraCompleta,STRPOS(l_txtHoraCompleta,':')+1);
l_txtMinuto := COPYSTR(l_txtHoraCompleta,1,STRPOS(l_txtHoraCompleta,':')-1);

l_txtHoraCompleta := COPYSTR(l_txtHoraCompleta,STRPOS(l_txtHoraCompleta,':')+1);
l_txtSegundo := l_txtHoraCompleta;

IF STRLEN(l_txtAnyo) = 2 THEN l_txtAnyo := '20'+l_txtAnyo;
IF STRLEN(l_txtMes) = 1 THEN l_txtMes := '0'+l_txtMes;
IF STRLEN(l_txtDia) = 1 THEN l_txtDia := '0'+l_txtDia;
IF STRLEN(l_txtHora) = 1 THEN l_txtHora := '0'+l_txtHora;
IF STRLEN(l_txtMinuto) = 1 THEN l_txtMinuto := '0'+l_txtMinuto;
IF STRLEN(l_txtSegundo) = 1 THEN l_txtSegundo := '0'+l_txtSegundo;

EXIT(l_txtAnyo+l_txtMes+l_txtDia+l_txtHora+l_txtMinuto+l_txtSegundo);

Espero que os sea muy útil.

6 opiniones en “Una idea feliz: Construir una cadena de ordenación de ficheros”

  1. Hola esta muy bien, pero tienes una manera mucho mas simple utilizando la función ‘FORMAT’ y las variables DATETIME. Con esa función puedes construir la plantilla que generará el format…
    el ejemplo que tu pones sería tan solo con esta línea:

    EXIT(FORMAT(CURRENTDATETIME,0,”));

    Esto devolvería el string con el AÑO MES DIA HORA MINUTO SEGUNDO…
    En ese ejemplo utilizo las variables del tipo DATETIME que creo que aparecieron por primera vez en la 4.0, pero si es anterior y no tienes este tipo siempre puedes hacer el format de la fecha más el format de la hora:

    EXIT(FORMAT(WORKDATE,0,”) + FORMAT(TIME,0,”));

    Un saludo.

    1. Hola Sergio, es cierto que FORMAT(CURRENTDATETIME) devuelve una cadena con la fecha y la hora, pero con los parámetros que tu me indicas, la cadena se queda en blanco. Quizás lo estemos probando en versiones diferentes.

      Lo mismo me pasa con FORMAT(WORKDATE,0,”). Estoy seguro de que hay alguna forma de utiliza FORMAT para hacer lo que comentas pero almenos a mí esta no me funciona.

      Otra cosa que se tendría que tener en cuenta es que FORMAT respete la longitud de cada “campo”. Es decir, las 9:00 del día 1/2/2011 tiene que quedar como 20110201090000 y no 201121900.

      1. Ha sido la página que me ha quitado lo que hay entre las comillas pensando que son tags de HTML 🙂
        cada uno va entre … lo que te escribo ahora es lo que va entre las comillas…

        Con Datetime: Year4 Month,2 Day,2 Hours24,2 Minutes,2 Seconds,2

        Con Date: Year4 Month,2 Day,2

        Con Time: Hours24,2 Minutes,2 Seconds,2

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *