Rexx provides a Stream method, named ARRAYIN, that reads the contents of a stream into an array object. ARRAYIN is convenient when you need to read an entire file into memory for processing. You can read the entire file with a single Rexx clause–no looping is necessary.
The following example (cview.rex) uses the ARRAYIN method to read the entire log.txt file into an array object. cview&per;cmd displays selected lines from log.txt. A search argument can be specified when starting cview&per;cmd:
| rexx cview libpath |
cview&per;cmd prompts for a search argument if you do not specify one.
If cview&per;cmd finds the string, it displays the line(s) in which the string was found. cview&per;cmd continues to prompt for a new search string until you enter Q in response to the prompt.
| /* cview&per;cmd - display lines from file log.txt */ |
| parse upper arg search_string /* Get any command line argument */ |
| file=.stream~new("log.txt") /* Create stream object */ |
| lines=file~arrayin /* Read file into an array object */ |
| /* LINES points to the array obj. */ |
| loop forever |
| if search_string="" then do /* Prompt for user input */ |
| say "Enter a search string or Q to quit:" |
| parse upper pull search_string |
| if search_string="Q" then exit |
| end |
| loop i over lines /* Scan the array */ |
| if pos(search_string,translate(i))>0 then do |
| say i /* Display any line that matches */ |
| say "="~copies(20) |
| end |
| end |
| search_string="" /* Reset for next search */ |
| end |