【问题标题】:How to get last modified time of file while using infile statement?使用 infile 语句时如何获取文件的最后修改时间?
【发布时间】:2021-04-30 00:18:12
【问题描述】:

我要分析一批 SAS 程序文件,我被困在获取程序文件的最后修改时间。我曾考虑过X 命令,但效率太低。
当我使用infile 声明时,我才发现:

data test;
  infile 'D:\test.txt' truncover;
  input ;
run;

日志显示上次修改时间:

NOTE: The infile 'D:\test.txt' is:
      Filename=D:\test.txt,
      RECFM=V,LRECL=32767,File Size (bytes)=7,
      Last Modified=2021/1/26 15:25:48,
      Create Time=2021/1/26 15:25:42

如您所见,日志窗口将文件信息显示为注释。但是,我的愿望输出是一个用 Last Modified Time 填充的变量

在使用infile 语句时是否有一些选项可以获取它? 当然,也欢迎其他有效的方法。

【问题讨论】:

  • 您对 .sas 文件执行什么样的分析?
  • @Richard 分析 SASor 的编程风格,例如函数使用和 proc 使用频率以及怀疑硬编码行为。我认为这对我和我的同事会有用。
  • 如果您想以编程方式搜索文件夹中的 .sas 文件,您还需要使用 DOPEN 然后循环 DNUM 次使用 DREAD 获取每个文件名并使用 DCLOSE 进行清理后循环
  • @Richard 是的,我可以稍后再试。我现在正在使用带有系统命令和 infile 语句的未命名管道,它允许我一次获取多个文件夹的信息。

标签: sas filetime


【解决方案1】:

使用函数FOPENFINFO

例子:

显示示例数据文件的所有可用信息项及其值。

filename datafile 'c:\temp\datafile.txt';

data _null_;
  file datafile;
  put 'Me data';
run;

data _null_;
  fid = fopen('datafile');

  if fid then do;
    do index = 1 to foptnum(fid);
      info_name = foptname(fid,index);
      info_value = finfo(fid, info_name);

      put index= info_name= @40 info_value=;       
    end;
    
    rc = fclose(fid);
  end;
run;

会记录诸如

之类的信息
index=1 info_name=Filename             info_value=c:\temp\datafile.txt
index=2 info_name=RECFM                info_value=V
index=3 info_name=LRECL                info_value=32767
index=4 info_name=File Size (bytes)    info_value=9
index=5 info_name=Last Modified        info_value=26Jan2021:06:29:47
index=6 info_name=Create Time          info_value=26Jan2021:06:28:23

【讨论】:

  • 谢谢,理查德。我会用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多