1. 目标
获取文件末次修改时间,可以举行一些的步调查抄。
比方,.sas和.log的末次修改时间,两者比力可以判断出,步调更新后,是否重新Run过;比方,Source侧 (Production)的.log文件与QC侧 (Validation)的.log的末次修改时间,判断V侧步调是否在P侧步调之后Run过。
2. 涉及内容
前面两篇文章先容了,通过SAS编程,怎样获取某路径下的全部文件名称,以及怎样怎样获取某个文件的末次修改时间:
SAS编程:怎样获取某路径下文件的名称?
SAS编程:怎样获取某文件的修改时间?
这篇文章是两者内容的联合,先利用Dopen系列函数获取全部文件的名称(文件路径),再利用Fopen系列函数获取全部文件的修改时间。
文章中所涉及具体函数先容,参考以下两篇文章:
SAS编程:Dopen系列函数先容
SAS编程:Fopen系列函数先容
我利用以下路径文件举行演示,路径中有4个.sas文件、4个.log文件,以及1个文件夹,共9个文件。
3. 获取全部文件的名称(文件路径)
利用Dopen函数打开指定路径,在当前SAS会话中,获取路径ID;利用Dnum函数获取该路径内的文件数量;利用Do语句循环以及Dread函数,获取路径下每一个文件的名称。
获取名称后,将文件夹路径与文件名称拼接,就获取到文件的对应路径。
**Dopen;%let dirpath = E:\99_Test\Test\test1;data _tmp1; fileres=filename("dirpath","&dirpath."); dirid=dopen("dirpath"); num = dnum(dirid); length direct filename filepath $200; if dirid > 0 and num > 0 then do; do i = 1 to num; direct = "&dirpath."; filename = dread(dirid, i); filepath = catx("\", direct,filename); output; end; end; keep direct filename filepath;run;运行效果如下:
4. 获取全部文件的修改时间
利用Fopen函数打开文件路径,在当前SAS会话中,获取文件ID;利用Finfo函数获取文件的修改时间。
差别SAS语言情况下,文件的属性名称差别。以末次修改时间为例:中文情况,“上次修改时间”;英文情况,“Last Modified”。
中文情况:
**Fopen -- Chinese;data _tmp2; set _tmp1; *Get fileID; fileres = filename("filepath", filepath); fileid = fopen("filepath"); *Get Last Modified date; if fileid > 0 then do; length Last_modified $200; Last_modified = finfo(fileid, "上次修改时间"); end; *Close fileID; fileid_c = fclose(fileid);run;效果如下:
英文情况:
**Fopen -- English;data _tmp2; set _tmp1; *Get fileID; fileres = filename("filepath", filepath); fileid = fopen("filepath"); *Get Last Modified date; if fileid > 0 then do; length Last_modified $200; Last_modified = finfo(fileid, "Last Modified"); end; *Close fileID; fileid_c = fclose(fileid);run;末了利用fclose函数注销当前SAS会话中文件ID的这一操作,在一样寻常工作中比力常用,也是一个比力好的编程风俗。
比方,对于不须要输出到SAS Results页面的步调效果,可以在其前后添加:ods results off;, ods results on,即关闭后再打开。
比方,在日志中输出某个宏步调的运行代码,可以在其前后添加:options mprint;, options nomprint;, 即打开后再关闭。
读者可以自行测试下,上面代码去掉fclose函数处理处罚后是什么输出效果。
总结
对于第4步,我实验了好几种方法,当前处理处罚是最轻便的。
之前文章SAS宏步调:批量获取文件的修改时间先容了,SAS怎样通过调用本机电脑CMD语句的返回效果,批量获取文件的修改时间。但在公司服务器体系测试发现,SAS无法访问CMD效果,我没去穷究具体缘故原由。
Python情况下,实现这一功能也不复杂,但要思量是否答应在公司体系内举行,须要跟IT沟通。
感谢阅读, 欢迎关注!
如有疑问,欢迎评论交换! |