0

I created a rexx program to read in a file from an argument and line by line add it to an array from there i have added some pulls do define a search criteria and then search the array, from their i wanted it to dynamically add a new member to a pds and fill it with the search outcome. it works but throws a bunch of errors.

this is the code

/* REXX READ FILE */                        
/*                            */            
/*                            */            
/*                            */            
/*                            */            
ARG INFILE                                  
IF ARG() = 0 THEN                           
 DO                                         
 SAY 'INPUT REQUIRED'                       
 EXIT                                       
 END                                         
/*                            */            
/*                            */            
SAY 'WHAT IS THE STRING YOU ARE LOOKING FOR'
PULL SEARCHLINE                             
IF SEARCHLINE = "" THEN                     
   DO                                       
     SAY 'YOU DID NOT ENTER A STRING'       
     SAY 'PLEASE ENTER ONE NOW'          
     PULL SEARCHLINE                     
   END                                   
/*                            */         
/*                            */         
/*                            */         
/* VALIDATING FILE EXISTANCE*/           
  INDDFILE = INFILE                        
  "LISTC NVSAM ENT('"INDDFILE"') "         
   IF RC = 0 THEN                           
     DO                                       
      SAY "FOUND" INDDFILE                     
    END                                      
    ELSE DO                                  
    SAY  INDDFILE 'NOT FOUND'                
EXIT                                     
END                                      

/**************************************/ 
"ALLOC F(INFILE) DSN('"INDDFILE"')SHR REU"  
"EXECIO * DISKR INFILE ( FINIS STEM MYFILE."
"FREE F(INFILE)"                            
STRLENG = LENGTH(SEARCHLINE)                
INDEX = 0                                       
I = 1                                       
DO WHILE I <= MYFILE.0                      
  RESULT = POS(SEARCHLINE,MYFILE.I)         
     IF RESULT /= 0 THEN                    
        DO                                  
        MATCH.INDEX =LEFT(MYFILE.I,12)      
        SAY MATCH.INDEX                     
        SAY INDEX                           
        INDEX = INDEX +1                    
        END                                 

 I = I + 1                                  
 END                                        
 SAY "WHAT IS THE OUT PUT FILE? "           
PULL FILE                                                   
FILE1 = FILE                                                
SAY "WHAT WILL THE MEMBER BE CALLED?"                       
PULL MEMBER                                                 
/*******************************************/               
/*******************************************/               
ADRESS TSO                                                      
"ALLOC DA('"FILE1"') F(ABCD) NEW SPACE(10,20)DIR(100)TRACKS"
"FREE F(ABCD)"                                              
/*******************************************/               
"ALLOC FI(ABCD) DA('"FILE1"("MEMBER")')SHR"                 
"EXECIO" INDEX "DISKW ABCD (STEM MATCH. FINIS"              
"FREE F(ABCD)"                                              
IF RC <> 0 THEN DO                                          
 SAY "ERROR IN ALLOCATING THE PDS MEMBER" RC                
 END                                                        
EXIT      

This is my error

COMMAND ADRESS NOT FOUND
63 - ADRESS TSO
+++ RC(-3) +++ DATA SET QXGCVNH.OUTLIB NOT ALLOCATED+ IGD17101I DATA SET Q*****H.OUTLIB NOT DEFINED BECAUSE DUPLICATE NAME EXISTS IN CATALOG RETURN CODE IS 8 REASON CODE IS 38 IGG0CLEH FILE ABCD NOT FREED, IS NOT ALLOCATED

Can anyone advise what i could do to correct the errors so i doesnt run that way? and Can someone advise if there is a way to only return the string you enter and not the entire line?

Thanks

Ivan Chaer
  • 6,980
  • 1
  • 38
  • 48

2 Answers2

1
  1. Change the ADRESS TSO to ADDRESS TSO at line 63
  2. Check to see if FILE1 exist's before you allocate it, you could use SysDSN, Listds, listcat etc to do this.

Basically:

ADRESS TSO                                                      
"ALLOC DA('"FILE1"') F(ABCD) NEW SPACE(10,20)DIR(100)TRACKS"
"FREE F(ABCD)"    

becomes basically

ADDRESS TSO 
if (File1 exists) then do                                           
    "ALLOC DA('"FILE1"') F(ABCD) NEW SPACE(10,20)DIR(100)TRACKS"
    "FREE F(ABCD)"    
end

You need to work how to do (File1 exists) though, just google it at check the various options

Bruce Martin
  • 10,358
  • 1
  • 27
  • 38
0

With regard to returning only the string. You may wish to check out some of the Rexx string handling functions. Perhaps Strip could assist.

MikeT
  • 51,415
  • 16
  • 49
  • 68