尝试在SAS中获取文件属性(文件大小,创建日期时间和上次修改日期时间)

时间:2015-12-18 20:47:51

标签: sas sas-macro

我使用以下宏来使用SAS获取Linux文件属性。我获取了大小和上次修改时间的值,但未获得"创建日期时间"的任何值。

%macro FileAttribs(filename);
  %local rc fid fidc;
  %local Bytes CreateDT ModifyDT;
   %let rc=%sysfunc(filename(onefile,&filename));
   %let fid=%sysfunc(fopen(&onefile));
   %let Bytes=%sysfunc(finfo(&fid,File Size (bytes)));
   %let CreateDT=%sysfunc(finfo(&fid,Create Time));
   %let ModifyDT=%sysfunc(finfo(&fid,Last Modified));
   %let fidc=%sysfunc(fclose(&fid));
   %let rc=%sysfunc(filename(onefile));
    %put NOTE: File size of &filename is &Bytes bytes;
    %put NOTE: Created &CreateDT;
    %put NOTE: Last modified &ModifyDT;
%mend FileAttribs;

%FileAttribs(/path/test.csv);

我无法想象我错过了什么。 除了大小,创建和修改日期之外,我们还能获得其他任何文件属性吗?

谢谢, 萨姆帕斯。

2 个答案:

答案 0 :(得分:2)

根据这个答案,许多Linux系统不会存储文件创建日期(或者如果它们存储它,则无法使用标准名称访问它):https://unix.stackexchange.com/questions/91197/how-to-find-creation-date-of-file

如果要通过FINFO()获取所有可用文件属性的值,可以使用FOPTNUM()查找可用属性的数量,然后循环它们。这是一个宏:

%macro GetAllAttributes(file);

  %local rc fref fid i AttributeName AttributeValue;

  %let rc=%sysfunc(filename(fref,&file));
  %let fid=%sysfunc(fopen(&fref));

  %do i=1 %to %sysfunc(foptnum(&fid));
    %let AttributeName=%sysfunc(foptname(&fid,&i));
    %let AttributeValue=%sysfunc(finfo(&fid,&AttributeName));
    %put &AttributeName : &AttributeValue;
  %end;

  %let fid=%sysfunc(fclose(&fid));
  %let rc=%sysfunc(filename(fref));

%mend GetAllAttributes;

在Windows(SAS 9.3)上,我得到:

78   %GetAllAttributes(d:\junk\somefile.txt)
Filename : d:\junk\somefile.txt
RECFM : V
LRECL : 256
File Size (bytes) : 1011
Last Modified : 06Dec2013:14:14:54
Create Time : 06Dec2013:14:14:52

在Linux(SAS 9.3)上,我得到:

41         %GetAllAttributes(~/somefile.txt)    
Filename : /home/Quentin/somefile.txt
Owner Name : Quentin
Group Name : somegroup
Access Permission : rwx------
Last Modified : Fri Dec  6 14:14:54 2013
File Size (bytes) : 1011

最后,请注意Linux上的SAS 9.3以丑陋的格式返回修改日期。技术支持告诉我,9.4会像Windows一样返回SAS友好的日期时间格式。如果您使用的是9.3,请参阅此问题以获取有关解析日期的建议:SAS macro function to get file modified date on linux

答案 1 :(得分:0)

有关可用内容的列表,您可以看到SAS Documentation for FINFO in Unix。对于您在上面列出的here列出的添加内容,这些内容未更新,但它们应该可以使用。

你的宏在Windows中为我检索了所有三个信息位,尽管这当然可能与Linux / Unix不同。 Windows文档确实列出了三个新项目 - 所以我想知道它们在Unix / Linux中是否存在问题,并且它们在9.3中并不完全支持。 (如果相关,它们仍未列入9.4文档中。)