繁体   English   中英

SAS宏功能可在Linux上获取文件修改日期

[英]SAS macro function to get file modified date on linux

使用宏函数将文件的修改日期作为SAS日期返回,该日期将在Linux(SAS 9.3)上运行。 我想避免使用OS命令(例如,传递LS命令的结果),因为代码需要在具有NOXCMD的环境中工作。 以下是使用finfo()的初稿(无错误处理代码等)。

对于finfo()返回的日期格式感到失望,例如“ Fri Apr 10 14:54:10 2015”。 然后令我更加失望的是,我无法在下面的丑陋解析下无法输入()这个字符串。 通常,我过去避免使用ANYDTDTE信息,这是因为担心它会进行过多的猜测并且不会引发错误。 但是,编写自定义日期时间格式来处理此字符串感觉有些过头。

希望能想到将日期字符串转换为SAS日期的更好方法,获得文件修改日期的更好方法以及下面的任何陷阱。

%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;

至少在Windows上不会发生这种情况。 我得到一个不错的SAS日期时间。

添加一些调试:

%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)

回报

RC=0
FID=2
MODDATE=19Mar2015:10:19:09

我不确定有没有一种更好的方法来使Linux能够按照您想要的方式工作,尽管您可以做出一些改进来避免ANYDTDTE,但是如果您已经在努力进行手工​​解析的话。

例如:

%let ModDate=
    %sysfunc(inputn(
        %scan(&moddate,3,%str( ))%scan(&moddate,2,%str( ))%scan(&moddate,5,%str( )),
        date9.)
     );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM