0

我想在 AIX 中获取 csv 文件的文件大小,并使用以下 X 和调用系统命令来完成。问题是我无法在稍后在程序中使用的宏变量中获取“文件大小”。

data _null_;
    call system('du -g p_bhj_c_hh100uk01po1.csv');
    call symput('space','X du -g p_bhj_c_hh100uk01po1.csv');
    %put &space; 
run;


WARNING: Apparent symbolic reference SPACE not resolved.
4

1 回答 1

2

首先,您调用的 SYMPUT 子例程不像您尝试使用它那样工作(ala Perl)。我建议阅读有关它的文档。

您在 SPACE 宏上遇到的错误是因为它在 DATA 步内。宏为您“编写” SAS 代码,因此&SPACE在执行数据步骤之前尝试解析宏。

这是一个代码示例,可以执行您正在寻找的内容:

data _null_;
rc = filename("ref","e:\temp\reg.pdf");
fid = fopen("ref");
infonum = foptnum(fid);
do i=1 to infonum;
    infoname = foptname(fid,i);
    infoval=finfo(fid,infoname);
    put infoname= infoval=;
end;
close = fclose(fid);
run;

/*In Windows, attribute is "File Size (bytes)"*/
data _null_;
rc = filename("ref","e:\temp\reg.pdf");
fid = fopen("ref");
size=finfo(fid,"File Size (bytes)");
call symput("size",size);
close = fclose(fid);
run;
%put &size;

AIX 中的文件大小属性可能不同。运行第一部分以查看所有可用属性。然后相应地修改第二个。同样,您将需要添加调用以生成文件,就像您已经在做的那样。

于 2013-09-10T16:35:09.937 回答