gpt4 book ai didi

linux - SAS宏函数在linux上获取文件修改日期

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:57 30 4
gpt4 key购买 nike

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

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

对于将日期字符串转换为 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.)
);

关于linux - SAS宏函数在linux上获取文件修改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30355046/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com