Как получить время последнего изменения файла при использовании оператора infile?

Я собираюсь проанализировать пакет программных файлов SAS, и я застрял в получении времени последнего изменения программных файлов. Я думал о команде X, но она оказалась слишком неэффективной.
Я просто нахожу, когда использую оператор infile:

data test;
  infile 'D:\test.txt' truncover;
  input ;
run;

Журнал показывает время последнего изменения:

NOTE: The infile 'D:\test.txt' is:
      Filename=D:\test.txt,
      RECFM=V,LRECL=32767,File Size (bytes)=7,
      Last Modified=2021/1/26 15:25:48,
      Create Time=2021/1/26 15:25:42

Как видите, окно журнала показывает информацию о файле в виде ПРИМЕЧАНИЯ. Тем не менее, вывод моих желаний — это переменная, заполненная временем последнего изменения.

Есть ли возможность получить его при использовании оператора infile? Конечно, приветствуются и другие эффективные способы.


person whymath    schedule 26.01.2021    source источник
comment
Какой анализ вы выполняете с файлами .sas?   -  person Richard    schedule 26.01.2021
comment
@Richard Анализ стиля программирования SASor, например использование функций и процедур с использованием частоты, и подозрение на поведение жесткого кодирования. Думаю, это будет полезно и мне, и моему коллеге.   -  person whymath    schedule 27.01.2021
comment
Если вы хотите программно искать файлы .sas в папке, вы также захотите использовать DOPEN, затем выполнить цикл DNUM раз, извлекая каждое имя файла с помощью DREAD и очищая с помощью DCLOSE цикла post.   -  person Richard    schedule 27.01.2021
comment
@ Ричард Да, я могу попробовать позже. Теперь я использую безымянный канал с системной командой и оператором infile, это позволяет мне получать информацию о более чем одной папке одновременно.   -  person whymath    schedule 28.01.2021


Ответы (1)


Используйте функции FOPEN и FINFO

Пример:

Показать все доступные элементы информации и их значение для примера файла данных.

filename datafile 'c:\temp\datafile.txt';

data _null_;
  file datafile;
  put 'Me data';
run;

data _null_;
  fid = fopen('datafile');

  if fid then do;
    do index = 1 to foptnum(fid);
      info_name = foptname(fid,index);
      info_value = finfo(fid, info_name);

      put index= info_name= @40 info_value=;       
    end;
    
    rc = fclose(fid);
  end;
run;

Будет регистрировать такую ​​информацию, как

index=1 info_name=Filename             info_value=c:\temp\datafile.txt
index=2 info_name=RECFM                info_value=V
index=3 info_name=LRECL                info_value=32767
index=4 info_name=File Size (bytes)    info_value=9
index=5 info_name=Last Modified        info_value=26Jan2021:06:29:47
index=6 info_name=Create Time          info_value=26Jan2021:06:28:23
person Richard    schedule 26.01.2021
comment
Спасибо, Ричард. Я буду использовать его. - person whymath; 27.01.2021