是否有SAS过程/功能可用于将文本文件从一个位置复制到另一个位置?
当然这可以使用OS命令(%sysexec copy)来实现,但肯定必须有与操作系统无关的方法来执行此操作?
从我通过查看文档可以看出,proc copy(或proc cport)仅涉及SAS文件.
最简单的方法是这样的:
data _null_;
infile 'c:\input.txt';
file 'c:\output.txt';
input;
put _infile_;
run;
Run Code Online (Sandbox Code Playgroud)
RawFocus提供的方法将从输入到输出一次一个字节地复制任何二进制文件.对于文本文件,这不是必需的,并且执行上述操作将一次一行地复制文件.您可能需要对记录长度略微小心,我相信默认记录长度为256,因此您可能需要明确说明
lrecl=32767
Run Code Online (Sandbox Code Playgroud)
infile声明中的选项或类似内容,如
infile 'c:\input.txt' lrecl=32767;
Run Code Online (Sandbox Code Playgroud)
似乎Chris Hemedinger有答案!
/* these IN and OUT filerefs can point to anything */
filename in "c:\dataIn\input.xlsx";
filename out "c:\dataOut\output.xlsx";
/* copy the file byte-for-byte */
data _null_;
length filein 8 fileid 8;
filein = fopen('in','I',1,'B');
fileid = fopen('out','O',1,'B');
rec = '20'x;
do while(fread(filein)=0);
rc = fget(filein,rec,1);
rc = fput(fileid, rec);
rc =fwrite(fileid);
end;
rc = fclose(filein);
rc = fclose(fileid);
run;
filename in clear;
filename out clear;
Run Code Online (Sandbox Code Playgroud)
谢谢克里斯
对于 SAS 9.4 及更高版本,请使用 FCOPY 函数。使用recfm=n(n 表示无或二进制)执行真实复制。
filename src "path-to-src" recfm=n;
filename dst "path-to-dst" recfm=n;
%let rc = %sysfunc(FCOPY(src,dst));
%put %sysfunc(SYSMSG());
Run Code Online (Sandbox Code Playgroud)
如果文件引用不使用 recfm=n 选项,FCOPY 会将它们视为文本文件,从而受到控制字符和文件结尾标记的影响。
| 归档时间: |
|
| 查看次数: |
7216 次 |
| 最近记录: |