Macro rXDIR (from Fraktal SAS Programming): Unterschied zwischen den Versionen

Aus phenixxenia.org
Zur Navigation springen Zur Suche springen
K
K
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 87: Zeile 87:
 
</font>  
 
</font>  
 
|
 
|
Branch for condition "''null value entered''"
+
Branch to label ''leave'' for condition "''null value entered''"
 
|-
 
|-
 
|
 
|
Zeile 129: Zeile 129:
 
</font>  
 
</font>  
 
|
 
|
 +
Open data stream from file reference
 
|-
 
|-
 
|
 
|
Zeile 135: Zeile 136:
 
</font>  
 
</font>  
 
|
 
|
 +
Define tokens coming in of varying length with name ''entry''
 
|-
 
|-
 
|
 
|
Zeile 141: Zeile 143:
 
</font>  
 
</font>  
 
|
 
|
 +
Instantly write ''entry'' to the LOG screen
 
|-
 
|-
 
|
 
|
Zeile 147: Zeile 150:
 
</font>  
 
</font>  
 
|
 
|
 +
Terminate the data step
 
|-
 
|-
 
|
 
|
Zeile 153: Zeile 157:
 
</font>  
 
</font>  
 
|
 
|
 +
Close data stream ''path''
 
|-
 
|-
 
|
 
|
Zeile 159: Zeile 164:
 
</font>  
 
</font>  
 
|
 
|
 +
Recursively call macro ''rxdir'' with parameter ''rpath''
 
|-
 
|-
 
|
 
|
Zeile 165: Zeile 171:
 
</font>  
 
</font>  
 
|
 
|
 +
Define GOTO label 'leave'
 
|-
 
|-
 
|
 
|
Zeile 171: Zeile 178:
 
</font>  
 
</font>  
 
|
 
|
 +
Empty macrovariable ''rpath''
 
|-
 
|-
 
|
 
|

Aktuelle Version vom 24. November 2014, 19:05 Uhr

Zurück

Übersicht

Vorwärts

What it does

This SAS Macro provides the function from XDIR in an interactive mode.

  • The recursive use of macro invocation keeps the macro "alive" until no further user input is made.
  • It might be of some interest to the novice user, how easy it is, to turn a simple "home-grew" function into an interactive tool.
Code executed Function performed

%MACRO rxdir(xpath);

Start macro definition with name and positional parameter xpath

%GLOBAL rpath;

Declare macrovariable rpath as global

%LET xpath = ;

Empty macrovariable xpath

%WINDOW path

Start definition for macro window path

irow = 20 rows = 14 icolumn = 130 columns = 64

Set coordinates for macro window path

#3 @5 "Current Path: &RPATH."

Define 1st output line containing value from macrovariable rpath

#5 @5 'Enter path: ' xpath 40 attr = blink

Define 2nd output line and field attributes to read macrovariable xpath

;

End definition of macro window path

%DISPLAY path;

Invoke macro window path

%IF %LENGTH(&XPATH.) = 0 %THEN %GOTO leave;

Branch to label leave for condition "null value entered"

%LET rpath = &RPATH.&XPATH.\;

Append value from macrovariable xpath to macrovariable rpath

filename path pipe "dir /b ""&RPATH.""" lrecl = 256;

Create file reference of type pipe to read entries from directory named in rpath

%PUT ---&RPATH.---;

Output roughly formatted header containing value from rpath

data _NULL_;

Initiate datastep w/o creating a dataset

length entry $256;

Specify field length to read directory entries' names into

infile path length = lrecl;

Open data stream from file reference

input entry $varying256. lrecl;

Define tokens coming in of varying length with name entry

put entry;

Instantly write entry to the LOG screen

run;

Terminate the data step

filename path clear;

Close data stream path

%RXDIR(&RPATH.)

Recursively call macro rxdir with parameter rpath

%LEAVE:

Define GOTO label 'leave'

%LET rpath = ;

Empty macrovariable rpath

%MEND rxdir;

END macro definition with name

Zurück

Übersicht

Vorwärts