2016-08-18 4 views
0

私は以下のコードを試していますが、私はzip形式のファイルを削除することができましたが、年齢の古いファイル。ファイル名はSFRE_BIL_SIT_20160812_134317_PAM_FILES1.zip になります.2歳のファイルを削除するためのフィルタリングを行うと、その日の部分が変更されるため、削除するファイルの年月部分のみに集中する必要があります。あなたのファイルが同じように命名されている場合は、コード2年前の外部フォルダからzipファイルを削除するには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

intnx()機能を使用する必要があり、日付 'SFRE_BIL_SIT_YYYYMMDD'またはそれが変化する前に、それは常に3部品コードですか? なぜあなたは 'mopen'と' fread'をやっていますか? – fl0r3k

+0

そのコードは実行されますか?どのようにあなたが望むことをしないのですか? – Tom

+0

はい前の日付は常に3部のコードで、日付はyyyymmddになります。ファイルが生成される月の日がわからないことがあるため、このフィールドからは年と月だけに集中できます。私が書いたコードは実行中ですが、すべてのzipファイルを削除しています。ディレクトリを開くためにusopを起動し、freadがファイルを読み込みます。今私はこのコードを変更する必要があります古い12ヶ月のファイルを削除する必要があります – Manesh

答えて

0

の下に見つけてください - 3部品コード、日付、すべてはあなたがscan()を使用することができます_で分離しました。 zip拡張子のファイルを確認するのに、すでにscan()を使用しています。あなたは、ファイル名から日付部分を抽出し、それを解析して数値に変換することもできます。 member_name

ソリューション1

4ワードは、YYYYMMDDの一部です:

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; 

しかし、与えられた月にのみ働くでしょう。 2年以上経過したファイルを削除するには、以下のようにすることができます。

date = mdy(month, day, year)

は次に実際の日付マイナス2年と比較:

ソリューション2

出回っは、すべての日付の部分は、日付を構築しました。 exacly 2年、今日から日付をシフトするには、

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

@ fl0r3kこんにちは私は、ファイルを削除するための鳥のコードと私のコードを使用していますが、 '月=入力(substr(datestring、5 、2)、最良。); \t \t日=入力(substr(datestring、7,2)、最高。); \t \t年=入力(substr(datestring、1,4)、最適)。 \t \t日付= mdy(月、日、年); \t \t \t intnx( 'year'、today()、-2)> date then do; ' – Manesh

+0

@Maneshこのコードのどの部分がうまくいかないのですか?動作しないのは1つだけです。 'INTNX()'関数には、シフトが開始、終了、中間、または同じ日付でなければならないという第4パラメータがあります。私の解答でそれを訂正しました。 – fl0r3k

+0

@ fl0r3kこんにちは、あなたの提案をありがとう。私は同じものを使用し、今私はファイルを削除することができます。ありがとう... – Manesh

関連する問題