Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions all.sas
Original file line number Diff line number Diff line change
Expand Up @@ -24171,6 +24171,58 @@ run;

%mend mfv_existsashdat;
/**
@file
@brief Returns the path of a folder from the URI
@details Makes use of the SYSMSG() ER8OR response, which resolves the uri,
seemingly without entering an er8or state.

Usage:

%mv_createfolder(path=/public/demo)
%let uri=%mfv_getpathuri(/public/demo);
%put %mfv_getfolderpath(&uri);

Notice above the new path has an uppercase P - the correct path.

@param [in] uri The uri of the folder -eg /folders/folders/xxxx)

<h4> SAS Macros </h4>
@li mf_getuniquefileref.sas

<h4> Related Macros </h4>
@li mfv_getpathuri.sas

@version 4
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
**/
%macro mfv_getfolderpath(uri
)/*/STORE SOURCE*/;

%local fref rc path msg var /* var used to avoid delete timing issue */;
%let fref=%mf_getuniquefileref();
%if %quote(%substr(%str(&uri),1,17)) ne %quote(/folders/folders/)
%then %do;
%put &sysmacroname: Invalid URI: &uri;
%end;
%else %if %sysfunc(filename(fref,,filesrvc,folderuri="&uri" ))=0
%then %do;
%let var=_FILESRVC_&fref._URI;
%local fid ;
%let fid= %sysfunc(fopen(&fref,I));
%let msg=%quote(%sysfunc(sysmsg()));

%unquote(%scan(&msg,2,%str(,.)))

%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
%put &sysmacroname: Not Found: &uri;
%let syscc=0;
%end;

%mend mfv_getfolderpath ;/**
@file
@brief Returns the uri of a file or folder
@details The automatic variable `_FILESRVC_[fref]_URI` is used after assigning
Expand Down
31 changes: 31 additions & 0 deletions tests/viyaonly/mfv_getfolderpath.test.sas
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
@file
@brief Testing mfv_getfolderpath macro function

<h4> SAS Macros </h4>
@li mf_uid.sas
@li mfv_getfolderpath.sas
@li mfv_getpathuri.sas
@li mp_assert.sas
@li mv_createfolder.sas

**/

options mprint sgen;

%let folder=%mf_uid();
/* create a folder */
%mv_createfolder(path=&mcTestAppLoc/&folder)
%mp_assert(
iftrue=(&syscc=0),
desc=no errs on folder creation
)

%let uri=%mfv_getpathuri(&mcTestAppLoc/&folder);
%put %mfv_getfolderpath(&uri);

%mp_assert(
iftrue=("%mfv_getfolderpath(&uri)"="&mcTestAppLoc/&folder"),
desc=Check if correct folder was returned
)

2 changes: 1 addition & 1 deletion tests/viyaonly/mfv_getpathuri.test.sas
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ options mprint sgen;

%let file=%mf_uid();

/* create a folder */
/* create a file */
filename somefile temp;
data _null_;
file somefile;
Expand Down
53 changes: 53 additions & 0 deletions viya/mfv_getfolderpath.sas
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/**
@file
@brief Returns the path of a folder from the URI
@details Makes use of the SYSMSG() ER8OR response, which resolves the uri,
seemingly without entering an er8or state.

Usage:

%mv_createfolder(path=/public/demo)
%let uri=%mfv_getpathuri(/public/demo);
%put %mfv_getfolderpath(&uri);

Notice above the new path has an uppercase P - the correct path.

@param [in] uri The uri of the folder -eg /folders/folders/xxxx)

<h4> SAS Macros </h4>
@li mf_getuniquefileref.sas

<h4> Related Macros </h4>
@li mfv_getpathuri.sas

@version 4
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
**/
%macro mfv_getfolderpath(uri
)/*/STORE SOURCE*/;

%local fref rc path msg var /* var used to avoid delete timing issue */;
%let fref=%mf_getuniquefileref();
%if %quote(%substr(%str(&uri),1,17)) ne %quote(/folders/folders/)
%then %do;
%put &sysmacroname: Invalid URI: &uri;
%end;
%else %if %sysfunc(filename(fref,,filesrvc,folderuri="&uri" ))=0
%then %do;
%let var=_FILESRVC_&fref._URI;
%local fid ;
%let fid= %sysfunc(fopen(&fref,I));
%let msg=%quote(%sysfunc(sysmsg()));

%unquote(%scan(&msg,2,%str(,.)))

%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(fref));
%symdel &var;
%end;
%else %do;
%put &sysmacroname: Not Found: &uri;
%let syscc=0;
%end;

%mend mfv_getfolderpath ;
Loading