mirror of
https://github.com/sasjs/core.git
synced 2026-01-05 00:20:05 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 493639fe4a | |||
| 4987d2fbbc | |||
| 1a35b357d6 |
73
all.sas
73
all.sas
@@ -2703,6 +2703,7 @@ create table &outds as
|
|||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mf_getquotedstr.sas
|
@li mf_getquotedstr.sas
|
||||||
|
@li mp_getconstraints.sas
|
||||||
|
|
||||||
@param liblist= Space seperated list of librefs to take as
|
@param liblist= Space seperated list of librefs to take as
|
||||||
input (Default=SASHELP)
|
input (Default=SASHELP)
|
||||||
@@ -2939,7 +2940,10 @@ run;
|
|||||||
data &pkds.4;
|
data &pkds.4;
|
||||||
file &outref mod;
|
file &outref mod;
|
||||||
set &pkds.2(where=(cols="&pkcols" and curds not in (&curdslist)));
|
set &pkds.2(where=(cols="&pkcols" and curds not in (&curdslist)));
|
||||||
line='Ref: "'!!"&curds"!!cats('".(',cols,')')!!' - '!!cats(quote(trim(curds)),'.(',cols,')');
|
line='Ref: "'!!"&curds"
|
||||||
|
!!cats('".(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')')
|
||||||
|
!!' - '
|
||||||
|
!!cats(quote(trim(curds)),'.(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')');
|
||||||
put line;
|
put line;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
@@ -4582,6 +4586,73 @@ proc sql
|
|||||||
%mp_binarycopy(inloc="&inloc",outref=_webout)
|
%mp_binarycopy(inloc="&inloc",outref=_webout)
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
|
%mend;/**
|
||||||
|
@file
|
||||||
|
@brief Recursively scans a directory tree to get all subfolders and content
|
||||||
|
@details
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%mp_tree(dir=/tmp, outds=work.tree)
|
||||||
|
|
||||||
|
Credits:
|
||||||
|
|
||||||
|
* Roger Deangelis, https://communities.sas.com/t5/SAS-Programming/listing-all-files-within-a-directory-and-subdirectories/m-p/332616/highlight/true#M74887
|
||||||
|
* Tom, https://communities.sas.com/t5/SAS-Programming/listing-all-files-of-all-types-from-all-subdirectories/m-p/334113/highlight/true#M75419
|
||||||
|
|
||||||
|
|
||||||
|
@param dir= Directory to be scanned (default=/tmp)
|
||||||
|
@param outds= Dataset to create (default=work.mp_tree)
|
||||||
|
|
||||||
|
@returns outds contains the following variables:
|
||||||
|
|
||||||
|
- `dir`: a flag (1/0) to say whether it is a directory or not. This is not
|
||||||
|
reliable - folders that you do not have permission to open will be flagged
|
||||||
|
as directories.
|
||||||
|
- `ext`: file extension
|
||||||
|
- `filename`: file name
|
||||||
|
- `dirname`: directory name
|
||||||
|
- `fullpath`: directory + file name
|
||||||
|
|
||||||
|
@version 9.2
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mp_tree(dir=/tmp
|
||||||
|
,outds=work.mp_tree
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
data &outds ;
|
||||||
|
length dir 8 ext filename dirname $256 fullpath $512 ;
|
||||||
|
call missing(of _all_);
|
||||||
|
fullpath = "&dir";
|
||||||
|
run;
|
||||||
|
|
||||||
|
%local sep;
|
||||||
|
%if &sysscp=WIN or &SYSSCP eq DNTHOST %then %let sep=\;
|
||||||
|
%else %let sep=/;
|
||||||
|
|
||||||
|
data &outds ;
|
||||||
|
modify &outds ;
|
||||||
|
retain sep "&sep";
|
||||||
|
rc=filename('tmp',fullpath);
|
||||||
|
dir_id=dopen('tmp');
|
||||||
|
dir = (dir_id ne 0) ;
|
||||||
|
if dir then dirname=fullpath;
|
||||||
|
else do;
|
||||||
|
filename=scan(fullpath,-1,sep) ;
|
||||||
|
dirname =substrn(fullpath,1,length(fullpath)-length(filename));
|
||||||
|
if index(filename,'.')>1 then ext=scan(filename,-1,'.');
|
||||||
|
end;
|
||||||
|
replace;
|
||||||
|
if dir then do;
|
||||||
|
do i=1 to dnum(dir_id);
|
||||||
|
fullpath=cats(dirname,sep,dread(dir_id,i));
|
||||||
|
output;
|
||||||
|
end;
|
||||||
|
rc=dclose(dir_id);
|
||||||
|
end;
|
||||||
|
rc=filename('tmp');
|
||||||
|
run;
|
||||||
|
|
||||||
%mend;/**
|
%mend;/**
|
||||||
@file mp_unzip.sas
|
@file mp_unzip.sas
|
||||||
@brief Unzips a zip file
|
@brief Unzips a zip file
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mf_getquotedstr.sas
|
@li mf_getquotedstr.sas
|
||||||
|
@li mp_getconstraints.sas
|
||||||
|
|
||||||
@param liblist= Space seperated list of librefs to take as
|
@param liblist= Space seperated list of librefs to take as
|
||||||
input (Default=SASHELP)
|
input (Default=SASHELP)
|
||||||
@@ -255,7 +256,10 @@ run;
|
|||||||
data &pkds.4;
|
data &pkds.4;
|
||||||
file &outref mod;
|
file &outref mod;
|
||||||
set &pkds.2(where=(cols="&pkcols" and curds not in (&curdslist)));
|
set &pkds.2(where=(cols="&pkcols" and curds not in (&curdslist)));
|
||||||
line='Ref: "'!!"&curds"!!cats('".(',cols,')')!!' - '!!cats(quote(trim(curds)),'.(',cols,')');
|
line='Ref: "'!!"&curds"
|
||||||
|
!!cats('".(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')')
|
||||||
|
!!' - '
|
||||||
|
!!cats(quote(trim(curds)),'.(',"%mf_getquotedstr(&pkcols,dlm=%str(,),quote=%str( ))",')');
|
||||||
put line;
|
put line;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
|
|||||||
68
base/mp_tree.sas
Normal file
68
base/mp_tree.sas
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Recursively scans a directory tree to get all subfolders and content
|
||||||
|
@details
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%mp_tree(dir=/tmp, outds=work.tree)
|
||||||
|
|
||||||
|
Credits:
|
||||||
|
|
||||||
|
* Roger Deangelis, https://communities.sas.com/t5/SAS-Programming/listing-all-files-within-a-directory-and-subdirectories/m-p/332616/highlight/true#M74887
|
||||||
|
* Tom, https://communities.sas.com/t5/SAS-Programming/listing-all-files-of-all-types-from-all-subdirectories/m-p/334113/highlight/true#M75419
|
||||||
|
|
||||||
|
|
||||||
|
@param dir= Directory to be scanned (default=/tmp)
|
||||||
|
@param outds= Dataset to create (default=work.mp_tree)
|
||||||
|
|
||||||
|
@returns outds contains the following variables:
|
||||||
|
|
||||||
|
- `dir`: a flag (1/0) to say whether it is a directory or not. This is not
|
||||||
|
reliable - folders that you do not have permission to open will be flagged
|
||||||
|
as directories.
|
||||||
|
- `ext`: file extension
|
||||||
|
- `filename`: file name
|
||||||
|
- `dirname`: directory name
|
||||||
|
- `fullpath`: directory + file name
|
||||||
|
|
||||||
|
@version 9.2
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mp_tree(dir=/tmp
|
||||||
|
,outds=work.mp_tree
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
data &outds ;
|
||||||
|
length dir 8 ext filename dirname $256 fullpath $512 ;
|
||||||
|
call missing(of _all_);
|
||||||
|
fullpath = "&dir";
|
||||||
|
run;
|
||||||
|
|
||||||
|
%local sep;
|
||||||
|
%if &sysscp=WIN or &SYSSCP eq DNTHOST %then %let sep=\;
|
||||||
|
%else %let sep=/;
|
||||||
|
|
||||||
|
data &outds ;
|
||||||
|
modify &outds ;
|
||||||
|
retain sep "&sep";
|
||||||
|
rc=filename('tmp',fullpath);
|
||||||
|
dir_id=dopen('tmp');
|
||||||
|
dir = (dir_id ne 0) ;
|
||||||
|
if dir then dirname=fullpath;
|
||||||
|
else do;
|
||||||
|
filename=scan(fullpath,-1,sep) ;
|
||||||
|
dirname =substrn(fullpath,1,length(fullpath)-length(filename));
|
||||||
|
if index(filename,'.')>1 then ext=scan(filename,-1,'.');
|
||||||
|
end;
|
||||||
|
replace;
|
||||||
|
if dir then do;
|
||||||
|
do i=1 to dnum(dir_id);
|
||||||
|
fullpath=cats(dirname,sep,dread(dir_id,i));
|
||||||
|
output;
|
||||||
|
end;
|
||||||
|
rc=dclose(dir_id);
|
||||||
|
end;
|
||||||
|
rc=filename('tmp');
|
||||||
|
run;
|
||||||
|
|
||||||
|
%mend;
|
||||||
Reference in New Issue
Block a user