%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:
Posts (Atom)