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

在cmd或SAS中列出压缩文本文件内容的代码?,cmd,sas,Cmd,Sas,在cmd或SAS中列出压缩文本文件内容的代码?有这么多的答案,但没有人确切地指向这个问题。无需下载任何其他.exe或安装程序包文件。请帮助,谢谢。zip文件是一个聚合存储位置,就像普通文件夹一样。语句infle aggregate fileref FILENAME=选项将提供当前聚合项名称。但是,ZIP文件名引擎似乎不遵守此约定。无论如何,您仍然可以访问zip中每个文件的所有内容 创建包含两个成员的zip文件: filename archive ZIP "%sysfunc(pathname(WO

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

zip文件是一个聚合存储位置,就像普通文件夹一样。语句
infle 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文件夹中的聚合输入):

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

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中的下一个成员时,filename值没有改变。无论如何,您仍然可以获得以下内容:

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
来运行处理zip文件的java代码。在锁定的服务器环境中,这两种方法都不可用,因为它们被视为会带来安全风险或不受监控的服务器资源使用的外部代理。

到目前为止,您尝试过或考虑过什么?您已经看过什么版本的SAS了吗?最新版本包括ZIP文件名引擎。什么操作系统?如果您在Unix上有解压程序,那么命令
unzip-Z
将显示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.