%macro isBlank( param ) ;
%sysevalf( %superq( param ) =, boolean )
%mend ;
%macro copyfile(
infile =
, outfile =
) ;
%local
rc
retval
_bcin
_bcout
;
%let retval = 0 ;
%if not %sysfunc( fileexist( &infile. ) ) %then
%put %str(E)RROR: Infile = &infile. does not exist. ;
%else %if %isblank( &outfile. ) %then
%put %str(E)RROR: must supply an outfile= value. ;
%else %do ;
/* create a fileref of the file using recfm=n or binary format */
%let rc = %sysfunc( filename( _bcin, &infile., , recfm = n ) ) ;
%if &rc. = 0 and %sysfunc( fexist( &_bcin. ) ) %then %do ;
%let rc = %sysfunc( filename( _bcout, &outfile., , recfm = n ) ) ;
/* copy the file using FCOPY() */
%if &rc. = 0 %then %let rc = %sysfunc( fcopy( &_bcin., &_bcout. ) ) ;
%if &rc = 0 %then %do ;
%put %str(N)OTE: Copied file: &infile. to &outfile. ;
/* set retval = 1 to a success value from the function */
%let retval = 1 ;
%end ;
%else %put %sysfunc( sysmsg() ) ;
/* deassign the file references */
%let rc = %sysfunc( filename( _bcin ) ) ;
%let rc = %sysfunc( filename( _bcout ) ) ;
%end ;
%end ;
/* return the status of the process where 1 = success */
&retval.
%mend ;
%macro deletefile( filename ) ;
%local
retval
rc
fref
;
%let retval = 0 ;
%if not %sysfunc( fileexist( &filename. ) ) %then
%put %str(E)RROR: &filename. does not exist. ;
%else %do ;
/* get a fileref */
%let rc = %sysfunc( filename( fref, &filename. ) ) ;
%if &rc. = 0 and %sysfunc( fexist( &fref. ) ) %then %do ;
/* delete the file */
%if %sysfunc( fdelete( &fref. ) ) = 0 %then %do ;
%put %str(N)OTE: Deleted file: &filename.. ;
%let retval = 1 ;
%end ;
%end ;
/* release the filefref */
%let rc = %sysfunc( filename( fref ) ) ;
%end ;
&retval.
%mend ;
%macro movefile(
infile =
, outfile =
) ;
%local
retval
rc
fref
;
%let retval = 0 ;
%if not %sysfunc( fileexist( &infile. ) ) %then
%put %str(E)RROR: Infile = &infile. does not exist. ;
%else %if %isblank( &outfile. ) %then
%put %str(E)RROR: must supply an outfile= value. ;
%else %do ;
/* copy then delete the input file */
%if %copyfile( infile = &infile., outfile = &outfile. ) %then %do ;
/* delete file only if a successful copy */
%let retval = %deletefile( &infile. ) ;
%end ;
%end ;
&retval.
%mend ;
Saturday, April 25, 2020
Move Copy Delete File Macros
Subscribe to:
Comments (Atom)