mirror of
https://github.com/sasjs/core.git
synced 2026-01-15 20:40:05 +00:00
fix: check 4 special chars b4 replacing. Closes #218
This commit is contained in:
54
all.sas
54
all.sas
@@ -8441,10 +8441,16 @@ options
|
|||||||
format _numeric_ bart.;
|
format _numeric_ bart.;
|
||||||
%do i=1 %to &numcols;
|
%do i=1 %to &numcols;
|
||||||
%if &&typelong&i=char or &fmt=Y %then %do;
|
%if &&typelong&i=char or &fmt=Y %then %do;
|
||||||
&&name&i='"'!!trim(prxchange('s/"/\"/',-1,
|
if prxmatch(
|
||||||
prxchange('s/'!!'0A'x!!'/\n/',-1,
|
'm/\"|\x0A|\x0D|\x09|\x00|\x0E|\x0F|\x01|\x02|\x10|\x11|\\/o',
|
||||||
prxchange('s/'!!'0D'x!!'/\r/',-1,
|
&&name&i
|
||||||
prxchange('s/'!!'09'x!!'/\t/',-1,
|
)>0
|
||||||
|
then do;
|
||||||
|
&&name&i='"'!!trim(
|
||||||
|
prxchange('s/"/\\"/',-1, /* double quote */
|
||||||
|
prxchange('s/\x0A/\n/',-1, /* new line */
|
||||||
|
prxchange('s/\x0D/\r/',-1, /* carriage return */
|
||||||
|
prxchange('s/\x09/\\t/',-1, /* tab */
|
||||||
prxchange('s/\x00/\\u0000/',-1, /* NUL */
|
prxchange('s/\x00/\\u0000/',-1, /* NUL */
|
||||||
prxchange('s/\x0E/\\u000E/',-1, /* SS */
|
prxchange('s/\x0E/\\u000E/',-1, /* SS */
|
||||||
prxchange('s/\x0F/\\u000F/',-1, /* SF */
|
prxchange('s/\x0F/\\u000F/',-1, /* SF */
|
||||||
@@ -8453,7 +8459,9 @@ options
|
|||||||
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
||||||
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
||||||
prxchange('s/\\/\\\\/',-1,&&name&i)
|
prxchange('s/\\/\\\\/',-1,&&name&i)
|
||||||
))))))))))))!!'"';
|
))))))))))))!!'"';
|
||||||
|
end;
|
||||||
|
else &&name&i=quote(cats(&&name&i));
|
||||||
%end;
|
%end;
|
||||||
%end;
|
%end;
|
||||||
run;
|
run;
|
||||||
@@ -14966,10 +14974,16 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' &&name&i=''"''!!trim(prxchange(''s/"/\"/'',-1, ';
|
put ' if prxmatch( ';
|
||||||
put ' prxchange(''s/''!!''0A''x!!''/\n/'',-1, ';
|
put ' ''m/\"|\x0A|\x0D|\x09|\x00|\x0E|\x0F|\x01|\x02|\x10|\x11|\\/o'', ';
|
||||||
put ' prxchange(''s/''!!''0D''x!!''/\r/'',-1, ';
|
put ' &&name&i ';
|
||||||
put ' prxchange(''s/''!!''09''x!!''/\t/'',-1, ';
|
put ' )>0 ';
|
||||||
|
put ' then do; ';
|
||||||
|
put ' &&name&i=''"''!!trim( ';
|
||||||
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
|
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
|
||||||
|
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
|
||||||
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
||||||
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
||||||
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
||||||
@@ -14978,7 +14992,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' ))))))))))))!!''"''; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
@@ -20457,10 +20473,16 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' &&name&i=''"''!!trim(prxchange(''s/"/\"/'',-1, ';
|
put ' if prxmatch( ';
|
||||||
put ' prxchange(''s/''!!''0A''x!!''/\n/'',-1, ';
|
put ' ''m/\"|\x0A|\x0D|\x09|\x00|\x0E|\x0F|\x01|\x02|\x10|\x11|\\/o'', ';
|
||||||
put ' prxchange(''s/''!!''0D''x!!''/\r/'',-1, ';
|
put ' &&name&i ';
|
||||||
put ' prxchange(''s/''!!''09''x!!''/\t/'',-1, ';
|
put ' )>0 ';
|
||||||
|
put ' then do; ';
|
||||||
|
put ' &&name&i=''"''!!trim( ';
|
||||||
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
|
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
|
||||||
|
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
|
||||||
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
||||||
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
||||||
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
||||||
@@ -20469,7 +20491,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' ))))))))))))!!''"''; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
|
|||||||
@@ -199,10 +199,16 @@
|
|||||||
format _numeric_ bart.;
|
format _numeric_ bart.;
|
||||||
%do i=1 %to &numcols;
|
%do i=1 %to &numcols;
|
||||||
%if &&typelong&i=char or &fmt=Y %then %do;
|
%if &&typelong&i=char or &fmt=Y %then %do;
|
||||||
&&name&i='"'!!trim(prxchange('s/"/\"/',-1,
|
if prxmatch(
|
||||||
prxchange('s/'!!'0A'x!!'/\n/',-1,
|
'm/\"|\x0A|\x0D|\x09|\x00|\x0E|\x0F|\x01|\x02|\x10|\x11|\\/o',
|
||||||
prxchange('s/'!!'0D'x!!'/\r/',-1,
|
&&name&i
|
||||||
prxchange('s/'!!'09'x!!'/\t/',-1,
|
)>0
|
||||||
|
then do;
|
||||||
|
&&name&i='"'!!trim(
|
||||||
|
prxchange('s/"/\\"/',-1, /* double quote */
|
||||||
|
prxchange('s/\x0A/\n/',-1, /* new line */
|
||||||
|
prxchange('s/\x0D/\r/',-1, /* carriage return */
|
||||||
|
prxchange('s/\x09/\\t/',-1, /* tab */
|
||||||
prxchange('s/\x00/\\u0000/',-1, /* NUL */
|
prxchange('s/\x00/\\u0000/',-1, /* NUL */
|
||||||
prxchange('s/\x0E/\\u000E/',-1, /* SS */
|
prxchange('s/\x0E/\\u000E/',-1, /* SS */
|
||||||
prxchange('s/\x0F/\\u000F/',-1, /* SF */
|
prxchange('s/\x0F/\\u000F/',-1, /* SF */
|
||||||
@@ -211,7 +217,9 @@
|
|||||||
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
prxchange('s/\x10/\\u0010/',-1, /* DLE */
|
||||||
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
|
||||||
prxchange('s/\\/\\\\/',-1,&&name&i)
|
prxchange('s/\\/\\\\/',-1,&&name&i)
|
||||||
))))))))))))!!'"';
|
))))))))))))!!'"';
|
||||||
|
end;
|
||||||
|
else &&name&i=quote(cats(&&name&i));
|
||||||
%end;
|
%end;
|
||||||
%end;
|
%end;
|
||||||
run;
|
run;
|
||||||
|
|||||||
@@ -232,10 +232,16 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' &&name&i=''"''!!trim(prxchange(''s/"/\"/'',-1, ';
|
put ' if prxmatch( ';
|
||||||
put ' prxchange(''s/''!!''0A''x!!''/\n/'',-1, ';
|
put ' ''m/\"|\x0A|\x0D|\x09|\x00|\x0E|\x0F|\x01|\x02|\x10|\x11|\\/o'', ';
|
||||||
put ' prxchange(''s/''!!''0D''x!!''/\r/'',-1, ';
|
put ' &&name&i ';
|
||||||
put ' prxchange(''s/''!!''09''x!!''/\t/'',-1, ';
|
put ' )>0 ';
|
||||||
|
put ' then do; ';
|
||||||
|
put ' &&name&i=''"''!!trim( ';
|
||||||
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
|
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
|
||||||
|
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
|
||||||
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
||||||
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
||||||
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
||||||
@@ -244,7 +250,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' ))))))))))))!!''"''; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
|
|||||||
53
tests/crossplatform/mp_jsonout.test.3.sas
Normal file
53
tests/crossplatform/mp_jsonout.test.3.sas
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mp_jsonout.sas macro with non-standard chars
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mp_jsonout.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
filename webref temp;
|
||||||
|
|
||||||
|
data demo;
|
||||||
|
do x='"','0A'x,'0D'x,'09'x,'00'x,'0E'x,'0F'x,'01'x,'02'x,'10'x,'11'x,'\';
|
||||||
|
output;
|
||||||
|
end;
|
||||||
|
run;
|
||||||
|
%mp_jsonout(OPEN,jref=webref)
|
||||||
|
%mp_jsonout(OBJ,demo,jref=webref)
|
||||||
|
%mp_jsonout(CLOSE,jref=webref)
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
infile webref;
|
||||||
|
input;
|
||||||
|
putlog _infile_;
|
||||||
|
run;
|
||||||
|
|
||||||
|
libname web JSON fileref=webref;
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(&syscc=0),
|
||||||
|
desc=Checking for error condition with special chars export,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
data _null_;
|
||||||
|
set work.demo (in=start) web.demo (in=end);
|
||||||
|
put (_all_)(=);
|
||||||
|
run;
|
||||||
|
proc sql;
|
||||||
|
describe table work.demo;
|
||||||
|
describe table web.demo;
|
||||||
|
*/
|
||||||
|
|
||||||
|
proc compare base=work.demo compare=web.demo(keep=x);
|
||||||
|
quit;
|
||||||
|
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=(&sysinfo=0),
|
||||||
|
desc=Returned json is identical to input table for all special chars,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
@@ -376,10 +376,16 @@ data _null_;
|
|||||||
put ' format _numeric_ bart.; ';
|
put ' format _numeric_ bart.; ';
|
||||||
put ' %do i=1 %to &numcols; ';
|
put ' %do i=1 %to &numcols; ';
|
||||||
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
|
||||||
put ' &&name&i=''"''!!trim(prxchange(''s/"/\"/'',-1, ';
|
put ' if prxmatch( ';
|
||||||
put ' prxchange(''s/''!!''0A''x!!''/\n/'',-1, ';
|
put ' ''m/\"|\x0A|\x0D|\x09|\x00|\x0E|\x0F|\x01|\x02|\x10|\x11|\\/o'', ';
|
||||||
put ' prxchange(''s/''!!''0D''x!!''/\r/'',-1, ';
|
put ' &&name&i ';
|
||||||
put ' prxchange(''s/''!!''09''x!!''/\t/'',-1, ';
|
put ' )>0 ';
|
||||||
|
put ' then do; ';
|
||||||
|
put ' &&name&i=''"''!!trim( ';
|
||||||
|
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
|
||||||
|
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
|
||||||
|
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
|
||||||
|
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
|
||||||
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
|
||||||
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
|
||||||
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
|
||||||
@@ -388,7 +394,9 @@ data _null_;
|
|||||||
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
|
||||||
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
|
||||||
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
|
||||||
put ' ))))))))))))!!''"''; ';
|
put ' ))))))))))))!!''"''; ';
|
||||||
|
put ' end; ';
|
||||||
|
put ' else &&name&i=quote(cats(&&name&i)); ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' %end; ';
|
put ' %end; ';
|
||||||
put ' run; ';
|
put ' run; ';
|
||||||
|
|||||||
Reference in New Issue
Block a user