用于列出cmd或SAS中压缩文本文件内容的代码?

时间:2018-01-17 12:35:39

标签: cmd sas

代码列出cmd或SAS中的压缩文本文件的内容?有这么多答案,但没有人完全指出这个问题。无需下载任何其他.exe或安装包文件。请帮助谢谢。

1 个答案:

答案 0 :(得分:0)

zip文件是聚合存储位置,与常规文件夹非常相似。语句INFILE aggregate-fileref FILENAME=选项将提供当前聚合项目名称。但是,ZIP文件引擎似乎不符合此约定。无论如何,您仍然可以访问zip中每个文件的所有内容。

创建一个包含两个成员的zip文件:

filename archive ZIP "%sysfunc(pathname(WORK))\testzip.zip";

%put NOTE: Archive file is %sysfunc(pathname(archive));
%put NOTE: Delete archive, rc=%sysfunc(fdelete(archive));

data _null_;
  file archive(one.txt);
  put 'i'; do i = 1 to 10; put i; end;
data _null_;
  file archive(two.txt);
  put 'z'; do z = 10 to 20; put z; end;
run;

在常规文件夹中创建两个文本文件(它们将用于对比ZIP和OS文件夹中的聚合输入):

filename folder "%sysfunc(pathname(WORK))";
data _null_;
  file folder(one.txt);
  put 'i'; do i = 1 to 10; put i; end;
data _null_;
  file folder(two.txt);
  put 'z'; do z = 10 to 20; put z; end;
run;

使用聚合语法从常规文件夹中的多个文件中读取。请注意如何记录文件名:

data _null_;
  length filename $250;
  infile folder(*.txt) filename=filename;  * specify which aggregate members to process; 
  input;
  if filename ne lag(filename) then put 'NOTE: ' filename=;
  put _infile_;
run;

----- LOG -----
NOTE: filename=C:\Users\Richard\AppData\Local\Temp\SAS Temporary Files\_TD24468_HELIUM_\one.txt
i
1
2
...
NOTE: filename=C:\Users\Richard\AppData\Local\Temp\SAS Temporary Files\_TD24468_HELIUM_\two.txt
z
10
11

现在从zip读取为聚合。不幸的是,当ZIP引擎移动到zip中的下一个成员时,文件名值不会改变。无论如何,你仍然得到了内容:

data _null_;
  length filename $250;
  infile archive(*.txt) filename=filename; 
  input;
  if filename ne lag(filename) then put 'NOTE: ' filename=;
  put _infile_;
run;

----- LOG -----
NOTE: filename=C:\Users\Richard\AppData\Local\Temp\SAS Temporary Files\_TD24468_HELIUM_\testzip.zip
i
1
...
10
z
10
...
20
NOTE: A total of 23 records were read from the infile library ARCHIVE.

如果您需要获取zip文件中的成员名称列表,在Windows中,没有其他安装,则有powershell个解决方案,在SAS中,您还可以执行Proc GROOVY来运行java处理zip文件的代码。在锁定的服务器环境中,这两种方法都不可用,因为它们被视为存在安全风险或不受监视的服务器资源使用的外部代理。