mirror of
https://github.com/sasjs/core.git
synced 2026-01-09 10:20:06 +00:00
feat: new mf_readfile macro (and test)
This commit is contained in:
63
base/mf_readfile.sas
Normal file
63
base/mf_readfile.sas
Normal file
@@ -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
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@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 */
|
||||||
29
tests/base/mf_readfile.test.sas
Normal file
29
tests/base/mf_readfile.test.sas
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mf_readfile.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@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
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user