1
0
mirror of https://github.com/sasjs/core.git synced 2026-04-03 16:03:13 +00:00

Compare commits

..

3 Commits

Author SHA1 Message Date
Allan Bowe
3a54b9c796 Merge pull request #419 from sasjs/islib_validation
Islib validation
2026-04-02 22:50:36 +00:00
github-actions
e66ef31e26 chore: updating all.sas 2026-04-02 22:45:31 +00:00
allan
186ea1cfba feat: adding ISLIB validation to mp_validatecol macro 2026-04-02 23:45:09 +01:00
3 changed files with 56 additions and 2 deletions

16
all.sas
View File

@@ -14541,7 +14541,7 @@ alter table &libds modify &var char(&len);
%mend mp_updatevarlength;
/**
@file
@brief Used to validate variables in a dataset
@brief Used to validate values in a data step
@details Useful when sanitising inputs, to ensure that they arrive with a
certain pattern.
Usage:
@@ -14568,6 +14568,7 @@ alter table &libds modify &var char(&len);
@param [in] incol The column to be validated
@param [in] rule The rule to apply. Current rules:
@li ISINT - checks if the variable is an integer
@li ISLIB - checks if the value is a valid libref (NOT whether it exists)
@li ISNUM - checks if the variable is numeric
@li LIBDS - matches LIBREF.DATASET format
@li FORMAT - checks if the provided format is syntactically valid
@@ -14606,6 +14607,19 @@ alter table &libds modify &var char(&len);
else &outcol=1;
drop &tempcol;
%end;
%else %if &rule=ISLIB %then %do;
if _n_=1 then do;
retain &tempcol;
&tempcol=prxparse('/^[_a-z]\w{0,7}$/i');
if missing(&tempcol) then do;
putlog 'ERR' +(-1) "OR: Invalid expression for ISLIB";
stop;
end;
drop &tempcol;
end;
if prxmatch(&tempcol, trim(&incol)) then &outcol=1;
else &outcol=0;
%end;
%else %if &rule=LIBDS %then %do;
/* match libref.dataset */
if _n_=1 then do;

View File

@@ -1,6 +1,6 @@
/**
@file
@brief Used to validate variables in a dataset
@brief Used to validate values in a data step
@details Useful when sanitising inputs, to ensure that they arrive with a
certain pattern.
Usage:
@@ -27,6 +27,7 @@
@param [in] incol The column to be validated
@param [in] rule The rule to apply. Current rules:
@li ISINT - checks if the variable is an integer
@li ISLIB - checks if the value is a valid libref (NOT whether it exists)
@li ISNUM - checks if the variable is numeric
@li LIBDS - matches LIBREF.DATASET format
@li FORMAT - checks if the provided format is syntactically valid
@@ -65,6 +66,19 @@
else &outcol=1;
drop &tempcol;
%end;
%else %if &rule=ISLIB %then %do;
if _n_=1 then do;
retain &tempcol;
&tempcol=prxparse('/^[_a-z]\w{0,7}$/i');
if missing(&tempcol) then do;
putlog 'ERR' +(-1) "OR: Invalid expression for ISLIB";
stop;
end;
drop &tempcol;
end;
if prxmatch(&tempcol, trim(&incol)) then &outcol=1;
else &outcol=0;
%end;
%else %if &rule=LIBDS %then %do;
/* match libref.dataset */
if _n_=1 then do;

View File

@@ -129,4 +129,30 @@ run;
desc=Test4 - ISFORMAT,
test=EQUALS 6,
outds=work.test_results
)
/**
* Test 5 - ISLIB
*/
data test5;
infile datalines4 dsd;
input;
inf=_infile_;
%mp_validatecol(inf,ISLIB,islib)
if islib=1;
datalines4;
some
!lib
%abort
definite
2fail
nineletrs
.failalso
_valid
;;;;
run;
%mp_assertdsobs(work.test5,
desc=Testing ISLIB,
test=EQUALS 3,
outds=work.test_results
)