mirror of
https://github.com/sasjs/core.git
synced 2026-01-15 12:30:06 +00:00
feat: mp_deletefolder tests, closes #90
This commit is contained in:
@@ -4,51 +4,66 @@
|
|||||||
@details Will delete all folder content (including subfolder content) and
|
@details Will delete all folder content (including subfolder content) and
|
||||||
finally, the folder itself.
|
finally, the folder itself.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%let rootdir=%sysfunc(pathname(work))/demo;
|
||||||
|
%mf_mkdir(&rootdir)
|
||||||
|
%mf_mkdir(&rootdir/subdir)
|
||||||
|
%mf_mkdir(&rootdir/subdir/subsubdir)
|
||||||
|
data "&rootdir/subdir/example.sas7bdat";
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mp_deletefolder(&rootdir)
|
||||||
|
|
||||||
@param path Unquoted path to the folder to delete.
|
@param path Unquoted path to the folder to delete.
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_getuniquename.sas
|
||||||
|
@li mf_isdir.sas
|
||||||
@li mp_dirlist.sas
|
@li mp_dirlist.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mp_deletefolder.test.sas
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
%macro mp_deletefolder(folder);
|
%macro mp_deletefolder(folder);
|
||||||
%let rc = %sysfunc(filename(fid,&folder));
|
/* proceed if valid directory */
|
||||||
%if &rc %then %do;
|
%if %mf_isdir(&folder)=1 %then %do;
|
||||||
%put rc = &rc ;
|
|
||||||
%put %sysfunc(sysmsg());
|
/* prep temp table */
|
||||||
%end;
|
%local tempds;
|
||||||
%else %do;
|
%let tempds=%mf_getuniquename();
|
||||||
%let rc = %sysfunc(fexist(&fid));
|
|
||||||
%if not &rc %then %put Folder does not exist. ;
|
/* recursive directory listing */
|
||||||
%else %if &rc %then %do;
|
%mp_dirlist(path=&folder,outds=work.&tempds, maxdepth=MAX)
|
||||||
%mp_dirlist(path=&folder,outds=mp_dirlist);
|
|
||||||
%let dsid = %sysfunc(open(mp_dirlist));
|
/* sort descending level so can delete folder contents before folders */
|
||||||
%let nobs = %sysfunc(attrn(&dsid,nobs));
|
proc sort data=work.&tempds;
|
||||||
%let rc = %sysfunc(close(&dsid));
|
by descending level;
|
||||||
%if &nobs %then %do;
|
run;
|
||||||
proc sort data=mp_dirlist;
|
|
||||||
by descending level;
|
/* ensure top level folder is removed at the end */
|
||||||
run;
|
proc sql;
|
||||||
data _null_;
|
insert into work.&tempds set filepath="&folder";
|
||||||
set mp_dirlist;
|
|
||||||
rc=filename('delfile',filepath);
|
/* delete everything */
|
||||||
rc=fdelete('delfile');
|
data _null_;
|
||||||
if rc then do;
|
set work.&tempds end=last;
|
||||||
put 'rc = ' rc;
|
length fref $8;
|
||||||
filepath=trim(filepath);
|
rc=filename(fref,filepath);
|
||||||
put 'Delete of ' filepath 'failed.';
|
rc=fdelete(fref);
|
||||||
end;
|
if rc then do;
|
||||||
run;
|
msg=sysmsg();
|
||||||
/* tidy up */
|
put "&sysmacroname:" / rc= / msg= / filepath=;
|
||||||
proc sql;
|
end;
|
||||||
drop table mp_dirlist;
|
rc=filename(fref);
|
||||||
quit;
|
run;
|
||||||
%end;
|
|
||||||
%let rc=%sysfunc(fdelete(&fid));
|
/* tidy up */
|
||||||
%if &rc %then %do;
|
proc sql;
|
||||||
%put rc = &rc;
|
drop table work.&tempds;
|
||||||
%put %sysfunc(sysmsg());
|
|
||||||
%end;
|
|
||||||
%end;
|
|
||||||
%end;
|
%end;
|
||||||
|
%else %put &sysmacroname: &folder: is not a valid / accessible folder. ;
|
||||||
%mend mp_deletefolder;
|
%mend mp_deletefolder;
|
||||||
@@ -51,6 +51,9 @@
|
|||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mp_dropmembers.sas
|
@li mp_dropmembers.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mp_dirlist.test.sas
|
||||||
|
|
||||||
@version 9.2
|
@version 9.2
|
||||||
@author Allan Bowe
|
@author Allan Bowe
|
||||||
**/
|
**/
|
||||||
@@ -71,7 +74,7 @@ data;run;
|
|||||||
|
|
||||||
/* drop main (top) table if it exists */
|
/* drop main (top) table if it exists */
|
||||||
%if &level=0 %then %do;
|
%if &level=0 %then %do;
|
||||||
%mp_dropmembers(&outds, libref=WORK)
|
%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
data &out_ds(compress=no
|
data &out_ds(compress=no
|
||||||
|
|||||||
50
tests/crossplatform/mp_deletefolder.test.sas
Normal file
50
tests/crossplatform/mp_deletefolder.test.sas
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mp_deletefolder.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mp_deletefolder.sas
|
||||||
|
@li mf_mkdir.sas
|
||||||
|
@li mf_nobs.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
@li mp_dirlist.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* make a directory structure
|
||||||
|
*/
|
||||||
|
|
||||||
|
%let root=%sysfunc(pathname(work))/top;
|
||||||
|
%mf_mkdir(&root)
|
||||||
|
%mf_mkdir(&root/a)
|
||||||
|
%mf_mkdir(&root/b)
|
||||||
|
%mf_mkdir(&root/a/d)
|
||||||
|
%mf_mkdir(&root/a/e)
|
||||||
|
%mf_mkdir(&root/a/e/f)
|
||||||
|
data "&root/a/e/f/ds1.sas7bdat";
|
||||||
|
x=1;
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mp_dirlist(path=&root, outds=myTable, maxdepth=MAX)
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%mf_nobs(work.mytable)=6),
|
||||||
|
desc=Temp data successfully created,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
|
%mp_deletefolder(&root/a)
|
||||||
|
|
||||||
|
%mp_dirlist(path=&root, outds=work.myTable2, maxdepth=MAX)
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
set work.mytable2;
|
||||||
|
putlog (_all_)(=);
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(%mf_nobs(work.mytable2)=1),
|
||||||
|
desc=Subfolder and contents successfully deleted,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Testing mp_ds2cards.sas macro
|
@brief Testing mp_dirlist.sas macro
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mf_nobs.sas
|
@li mf_nobs.sas
|
||||||
@@ -41,7 +41,7 @@ run;
|
|||||||
outds=work.test_results
|
outds=work.test_results
|
||||||
)
|
)
|
||||||
|
|
||||||
%mp_dirlist(path=&root, outds=myTable3, maxdepth=0)
|
%mp_dirlist(path=&root, outds=work.myTable3, maxdepth=0)
|
||||||
|
|
||||||
%mp_assert(
|
%mp_assert(
|
||||||
iftrue=(%mf_nobs(work.mytable3)=2),
|
iftrue=(%mf_nobs(work.mytable3)=2),
|
||||||
|
|||||||
Reference in New Issue
Block a user