Список файлов UNIX SAS

Список файлов UNIX SAS

07.02.2020 05:22:26 Просмотров 6 Источник

я нашел код, который перечисляет все каталоги и подкаталоги из пути. но он приносит только каталог и имя файла. не могли бы вы, ребята, помочь мне, как привести владельца и размер файла?

%macro list_files(dir);
  %local filrf rc did memcnt name i;
  %let rc=%sysfunc(filename(filrf,&dir));
  %let did=%sysfunc(dopen(&filrf));      

   %if &did eq 0 %then %do; 
    %put Directory &dir cannot be open or does not exist;
    %return;
  %end;

   %do i = 1 %to %sysfunc(dnum(&did));   

   %let name=%qsysfunc(dread(&did,&i));

   %if %index(%qscan(&name,-1,'/'),.) gt 0   %then %do;

        data _tmp;
          length dir $512 name $100;
          dir=symget("dir");
          name=symget("name");
        run;
        proc append base=want data=_tmp;
        run;quit;

      %end;
      %else %if %qscan(&name,2,.) = %then %do;        
        %list_files(&dir/&name)
      %end;

   %end;
   %let rc=%sysfunc(dclose(&did));
   %let rc=%sysfunc(filename(filrf));     

%mend list_files;
У вопроса есть решение - Посмотреть?

Ответы - Список файлов UNIX SAS / Listing files UNIX SAS

Является ответом!
Richard

07.02.2020 05:52:22

DOPTNAME-это ваш друг здесь.

Прочитайте документацию SAS для " примера 1: Использование DOPTNAME для получения информации атрибута каталога"

В этом примере открывается каталог с именем fileref MYDIR, извлекаются все зависящие от системы информационные элементы каталога, записываются в журнал SAS и закрываются каталоги.:

%let rc=%sysfunc(filename(filrf, physical-name));
%let did=%sysfunc(dopen(&filrf));
%let infocnt=%sysfunc(doptnum(&did));
%do j=1 %to &infocnt;
   %let opt=%sysfunc(doptname(&did, &j));
   %put Directory information=&opt;
%end;
%let rc=%sysfunc(dclose(&did));

%macro test; 
 %let filrf=mydir;
 %let rc=%sysfunc(filename(filrf, physical-name));
 %let did=%sysfunc(dopen(&filrf));
 %let infocnt=%sysfunc(doptnum(&did));
  %do j=1 %to &infocnt;
   %let opt=%sysfunc(doptname(&did, &j));
   %put Directory information=&opt;
  %end;
 %let rc=%sysfunc(dclose(&did));
%mend test;

%test
Stu Sztukowski

07.02.2020 06:00:35

Используйте функцию finfo(). Все это можно сделать за один data

Leandro Ciscar

07.02.2020 07:32:14

спасибо, ребята, сработали просто отлично!

Закрыть X