SAS fdelete宏不会删除.xml文件

时间:2018-11-23 17:25:04

标签: xml sas

我有一个宏,它遍历文件系统上的一组文件夹并删除.txt或.xml文件:

%macro delete_all_txt_files_in_folder(folder, type);


        %macro dummy;


        %mend dummy;


        filename filelist "&folder";

        data _null_;

            dir_id = dopen('filelist');
            total_members = dnum(dir_id);

            if total_members = . then total_members = 0;

            do i = 1 to total_members; 

                member_name = dread(dir_id,i);

                if scan(lowcase(member_name),2,'.')='&type.' 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_txt_files_in_folder(&rback_4., txt);
    %delete_all_txt_files_in_folder(&rback_5., xml);
    %delete_all_txt_files_in_folder(&rback_6., txt);
    %delete_all_txt_files_in_folder(&rback_7., txt);

...但是由于某种原因它不想删除.xml文件,我不确定为什么。 fdelete可以删除哪些文件类型有限制?

谢谢

2 个答案:

答案 0 :(得分:1)

宏表达式不在单引号内求值。 更改

'&type.'

"&type."

答案 1 :(得分:0)

宏变量不能用单引号引起来(除非使用例如%BQUOTE('&VAR')

if scan(lowcase(member_name),2,'.')='&type.' then do; 

需要成为

if scan(lowcase(member_name),2,'.')="&type." then do;