2016-08-18 60 views
0

荫与下面的代码试图和我能够删除这是zip格式的文件,但我需要有2岁多的外部文件夹中删除的zip文件,以了解我们如何才可以过滤删除2年的文件。该文件的名称将是SFRE_BIL_SIT_20160812_134317_PAM_FILES1.zip 做过滤删除2岁fiIes我需要集中精力只有年份和月份部分的文件做删除,因为这一天的部分将被改变的时候。请找到下面的代码使用SAS

options mlogic; 
%macro delete_all_zip_files_in_folder(folder); 
    filename filelist "&folder"; 
    data _null_; 
     dir_id = dopen('filelist'); 
     total_members = dnum(dir_id); 
     do i = 1 to total_members; 
     member_name = dread(dir_id,i); 
     if scan(lowcase(member_name),2,'.')='zip' then do; 
      file_id = mopen(dir_id,member_name,'i',0); 
      if file_id > 0 then do; 
      freadrc = fread(file_id); 
      rc = fclose(file_id); 
      rc = filename('delete',member_name,,,'filelist'); 
      rc = fdelete('delete'); 
     end; 
     rc = fclose(file_id); 
     end; 
     end; 
     rc = dclose(dir_id); 
    run; 
%mend; 


%delete_all_zip_files_in_folder(C:\Users\UCS1MKP\Desktop\test) 
+0

是否总是3部分代码之前日期'SFRE_BIL_SIT_YYYYMMDD'或者变化? 你为什么要做'mopen'和'fread'? – fl0r3k

+0

该代码是否运行?它不怎么做你想要的? – Tom

+0

是日期之前是始终3部分代码和日期将是yyyymmdd。它更好,我们可以只专注于这个领域的年份和月份,因为我们可能不知道一个月内哪些日子文件会生成。我写的代码正在运行,但它删除了所有的zip文件。打开usw打开目录,fread读取文件。现在我需要更改此代码这样一种方式,它应该删除的文件,这旧的12个月 – Manesh

回答

0

如果您的文件以同样的方式命名 - 3部分代码,那么迄今为止,所有与_分离,您可以使用scan()。您已经使用scan()检查扩展名为zip的文件。你可以这样做,从文件名中提取日期部分,然后解析并转换为数字。

解决方案1 ​​

member_name第四个单词是年月日部分:

datestring = scan(member_name,4,'_')

前4位为年份:

year = input(substr(datestring,1,4),best.)

然后2位数字为月:

month = input(substr(datestring,5,2),best.)

最后2位数字为天(以防万一,你需要一天):

day = input(substr(datestring,5,2),best.)

在刚刚结束与实际月份和年份比较:

if month = month(today()) and year = year(today()) then do; 
    *your code for deleting file; 
end; 

但t只会在特定月份工作。要删除2年以上的文件,你可以做如下的事情。

解决方案2

已历经已经全部日期部分构建日期:

date = mdy(month, day, year)

然后将其与实际日期减去2年比较。要改变日期从今天exacly两至三年可应使用intnx()功能

if intnx('year', today(), -2, 'S') > date do; 
    *your code for deleting file; 
end; 
+0

@ fl0r3k您好我使用的beow代码和我删除的文件,但它不工作'月=输入(SUBSTR(datestring码5 ,2),最好的)。 \t \t day = input(substr(datestring,7,2),best。); \t \t year = input(substr(datestring,1,4),best。); \t \t date = mdy(month,day,year); \t \t \t if intnx('year',today(), - 2)> date then do;' – Manesh

+0

@Manesh此代码的哪部分内容不起作用?只能有一件事情不起作用。在'INTNX()'函数中,有第四个参数说明如果移位应该是开始,结束,中间或同一日期。已经在我的回答中纠正了它。 – fl0r3k

+0

@ fl0r3k嗨,感谢您的建议。我使用了相同的功能,现在我可以删除这些文件。谢谢 ... – Manesh