Макрос SAS fdelete не удаляет XML-файлы - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть макрос, который перебирает набор папок в файловой системе и удаляет файлы .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 голосов
/ 24 ноября 2018

Макропеременные не разрешаются в одинарных кавычках (кроме случаев использования, например, %BQUOTE('&VAR'))

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

должно быть

if scan(lowcase(member_name),2,'.')="&type." then do; 
0 голосов
/ 24 ноября 2018

Выражения макросов не оцениваются внутри одинарных кавычек.Измените

'&type.'

на

"&type."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...