SAS编程:怎样获取某路径下全部文件的修改时间?

分享
手机软件开发 2024-9-30 14:51:09 40 0 来自 中国
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;运行效果如下:
2.png 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沟通。
感谢阅读, 欢迎关注!
如有疑问,欢迎评论交换!
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 00:50, Processed in 0.189164 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表