por - saber fecha archivo linux
Función de macro SAS para obtener la fecha de modificación del archivo en Linux (1)
Eso no sucede en Windows, al menos. Obtengo un buen horario de SAS.
Añadiendo algo de depuración:
%macro GetModDate(file);
%*Get the modified date of a linux file, as SAS date;
%local rc fref fid ModDate;
%let rc=%sysfunc(filename(fref,&file));
%put &=rc;
%let fid=%sysfunc(fopen(&fref));
%put &=fid;
%let ModDate=%sysfunc(finfo(&fid,Last Modified));
%put &=ModDate;
%*Linux Last Modified returns format like: Fri Apr 10 14:54:10 2015;
%let ModDate=%sysfunc(inputn(%scan(&moddate,2,%str( )) %scan(&moddate,3,%str( )) %scan(&moddate,5,%str( ))
,anydtdte11
));
%let fid=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(fref));
&ModDate
%mend GetModDate;
%getModDate(c:/temp/test.html)
devoluciones
RC=0
FID=2
MODDATE=19Mar2015:10:19:09
Sin embargo, no estoy seguro de que haya una mejor manera si Linux funciona de la manera que usted desea, aunque podría hacer algunas mejoras para evitar ANYDTDTE si ya está haciendo el esfuerzo de analizarlo a mano.
Por ejemplo:
%let ModDate=
%sysfunc(inputn(
%scan(&moddate,3,%str( ))%scan(&moddate,2,%str( ))%scan(&moddate,5,%str( )),
date9.)
);
Trabajando en una función de macro para devolver la fecha de modificación de un archivo como una fecha SAS, que se ejecutará en Linux (SAS 9.3). Quiero evitar el uso de comandos del sistema operativo (por ejemplo, conectar los resultados de un comando LS) ya que el código necesita funcionar en un entorno con NOXCMD. A continuación se muestra un primer borrador (sin código de manejo de errores, etc.), usando finfo ().
Me decepcionó el formato de la fecha devuelta por finfo (), por ejemplo, "Viernes 10 de abril, 14:54:10 2015". Luego me decepcionó más mi incapacidad para ingresar () esta cadena sin el feo análisis siguiente. En general, he evitado el uso de la información ANYDTDTE en el pasado, por temor a que adivine demasiado y no arroje errores. Pero se siente excesivo escribir una información personalizada de fecha y hora para manejar esta cadena.
Apreciaría las ideas sobre mejores formas de convertir la cadena de fecha a una fecha de SAS, mejores formas de obtener la fecha de modificación del archivo y las dificultades a continuación.
%macro GetModDate(file);
%*Get the modified date of a linux file, as SAS date;
%local rc fref fid ModDate;
%let rc=%sysfunc(filename(fref,&file));
%let fid=%sysfunc(fopen(&fref));
%let ModDate=%sysfunc(finfo(&fid,Last Modified));
%*Linux Last Modified returns format like: Fri Apr 10 14:54:10 2015;
%let ModDate=%sysfunc(inputn(%scan(&moddate,2,%str( )) %scan(&moddate,3,%str( )) %scan(&moddate,5,%str( ))
,anydtdte11
));
%let fid=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(fref));
&ModDate
%mend GetModDate;