diff --git a/base/mf_readfile.sas b/base/mf_readfile.sas new file mode 100644 index 0000000..fa7fd97 --- /dev/null +++ b/base/mf_readfile.sas @@ -0,0 +1,63 @@ +/** + @file + @brief Reads the first line of a file using pure macro + @details Reads the first line of a file and returns it. Future versions may + read each line into a macro variable array. + + Generally, reading data into macro variables is not great as certain + nonprintable characters (such as CR, LF) may be dropped in the conversion. + + Usage: + + %mf_writefile(&sasjswork/myfile.txt,l1=some content,l2=more content) + + %put %mf_readfile(&sasjswork/myfile.txt); + + + @param [in] fpath Full path to file to be read + +

Related Macros

+ @li mf_deletefile.sas + @li mf_writefile.sas + @li mf_readfile.test.sas + + @version 9.2 + @author Allan Bowe +**/ +/** @cond */ + +%macro mf_readfile(fpath +)/*/STORE SOURCE*/; +%local fref rc fid fcontent; + +/* check file exists */ +%if %sysfunc(filename(fref,&fpath)) ne 0 %then %do; + %put &=fref &=fpath; + %put %str(ERR)OR: %sysfunc(sysmsg()); + %return; +%end; + +%let fid=%sysfunc(fopen(&fref,I)); + +%if &fid=0 %then %do; + %put %str(ERR)OR: %sysfunc(sysmsg()); + %return; +%end; + +%if %sysfunc(fread(&fid)) = 0 %then %do; + %let rc=%sysfunc(fget(&fid,fcontent,65534)); + &fcontent +%end; + +/* +%do %while(%sysfunc(fread(&fid)) = 0); + %let rc=%sysfunc(fget(&fid,fcontent,65534)); + &fcontent +%end; +*/ + +%let rc=%sysfunc(fclose(&fid)); +%let rc=%sysfunc(filename(&fref)); + +%mend mf_readfile; +/** @endcond */ diff --git a/tests/base/mf_readfile.test.sas b/tests/base/mf_readfile.test.sas new file mode 100644 index 0000000..92bc354 --- /dev/null +++ b/tests/base/mf_readfile.test.sas @@ -0,0 +1,29 @@ +/** + @file + @brief Testing mf_readfile.sas macro + +

SAS Macros

+ @li mf_readfile.sas + @li mp_assert.sas + +**/ + +%let f=&sasjswork/myfile.txt; + +%mf_writefile(&f,l1=some content,l2=more content) +data _null_; + infile "&f"; + input; + putlog _infile_; +run; + +%mp_assert( + iftrue=(&syscc=0), + desc=Check code ran without errors, + outds=work.test_results +) +%mp_assert( + iftrue=(&f=some content), + desc=Checking first line was ingested successfully, + outds=work.test_results +)