1
0
mirror of https://github.com/sasjs/core.git synced 2026-01-09 02:10:06 +00:00

fix: adding fileref options and an additional test for mp_binarycopy

This commit is contained in:
munja
2022-06-26 16:12:49 +01:00
parent 532bf84e06
commit 7a69698178
8 changed files with 81 additions and 52 deletions

46
all.sas
View File

@@ -3470,8 +3470,8 @@ run;
@details Reads in a file byte by byte and writes it back out. Is an
os-independent method to copy files. In case of naming collision, the
default filerefs can be modified.
Based on:
https://stackoverflow.com/questions/13046116/using-sas-to-copy-a-text-file
Note that if you have a new enough version of SAS, and you don't need features
such as APPEND, you may be better of using the fcopy() function instead.
%mp_binarycopy(inloc="/home/me/blah.txt", outref=_webout)
@@ -3511,14 +3511,9 @@ run;
,outref=____out /* override default to use own filerefs */
,mode=CREATE
)/*/STORE SOURCE*/;
%local mod outmode;
%if &mode=APPEND %then %do;
%let mod=mod;
%let outmode='a';
%end;
%else %do;
%let outmode='o';
%end;
%local mod;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
@@ -3529,8 +3524,8 @@ run;
/* copy the file byte-for-byte */
data _null_;
infile &inref;
file &outref;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
@@ -3542,7 +3537,8 @@ run;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;/**
%mend mp_binarycopy;
/**
@file
@brief Splits a file of ANY SIZE by reference to a search string.
@details Provide a fileref and a search string to chop off part of a file.
@@ -8812,10 +8808,10 @@ options
"&&name&i"n /* name literal for reserved variable names */
%end;
%if &action=ARR %then "]" ; %else "}" ; ;
/* now write the long strings to _webout 1 byte at a time */
/* now write the long strings to _webout 1 char at a time */
data _null_;
infile _sjs;
file &jref mod;
infile _sjs lrecl=1 recfm=n;
file &jref mod lrecl=1 recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
@@ -15189,10 +15185,10 @@ data _null_;
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' /* now write the long strings to _webout 1 byte at a time */ ';
put ' /* now write the long strings to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs; ';
put ' file &jref mod; ';
put ' infile _sjs lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
@@ -19922,10 +19918,10 @@ data _null_;
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' /* now write the long strings to _webout 1 byte at a time */ ';
put ' /* now write the long strings to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs; ';
put ' file &jref mod; ';
put ' infile _sjs lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
@@ -22263,10 +22259,10 @@ data _null_;
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' /* now write the long strings to _webout 1 byte at a time */ ';
put ' /* now write the long strings to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs; ';
put ' file &jref mod; ';
put ' infile _sjs lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';