Page 1 of 2

COMMAND NOT FOUND

PostPosted: Fri Sep 06, 2019 7:39 pm
by samb01
Hello, i have this rexx et i can't anderstand why i have the error at the end of the rexx :

IKJ56500I COMMAND SG3 NOT FOUND


This is my rexx


/* REXX */                                        
TRACE I                                          
"EXECIO * DISKR IN (STEM DT."                    
DO I=3 TO DT.0                                    
   SG.I   = WORD(DT.I,1)                          
   DISK.I = WORD(DT.I,2)                          
   PART.I = WORD(DT.I,3)                          
   /* DETECTION DE L ENVIRONNEMENT */            
 SELECT                                          
  WHEN PART.I = 'AGRICA' THEN                    
  DO                                              
    QUEUE SG.I ' ' DISK.I                        
    "EXECIO * DISKW OUTK (FINIS"                  
    QUEUE ""                                      
  END                                            
  WHEN PART.I = 'AUDIENS' THEN                    
  DO                                              
    QUEUE SG.I ' ' DISK.I                        
    "EXECIO * DISKW OUTO (FINIS"                                    
    QUEUE ""                                                        
  END                                                              
  WHEN (PART.I = 'B2V' ! PART.I = 'URCREP') THEN                    
  DO                                                                
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTB (FINIS"                                    
    QUEUE ""                                                        
  END                                                              
  WHEN (PART.I = 'NHCBTP' ! PART.I = 'BNPCAR' ! PART.I = 'VRF') THEN
  DO                                                                
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTN (FINIS"                                    
    QUEUE ""                                                        
  END                                                              
  WHEN (PART.I = 'PROBTP' ! PART.I = 'MNRA' ! PART.I = 'CRP' ! ,    
        PART.I = 'REGARD' ! PART.I = 'SEVEANE') THEN                
  DO                                                                
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTP (FINIS"                                    
    QUEUE ""                                                        
  END                                                              
  WHEN (PART.I = 'DVLP' ! PART.I = 'SICAP') THEN                    
  DO                                                                
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTD (FINIS"                                    
    QUEUE ""                                                        
  END                                                              
  WHEN (PART.I = 'HACTIF' ! PART.I = 'GIP') THEN                    
  DO                                                                
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTH (FINIS"                                    
    QUEUE ""                                                        
  END                                                              
  WHEN (PART.I = 'HDS' ! PART.I = 'SHDS') THEN                      
  DO                                                                
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTS (FINIS"                                    
    QUEUE ""                                                      
  END                                                              
  WHEN PART.I = 'IRP' THEN                                        
  DO                                                              
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTG (FINIS"                                  
    QUEUE ""                                                      
  END                                                              
  WHEN PART.I = 'LOURMEL' THEN                                    
  DO                                                              
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTL (FINIS"                                  
    QUEUE ""                                                      
  END                                                              
  WHEN PART.I = 'PREPROD' THEN                                    
  DO                                                              
    QUEUE SG.I ' ' DISK.I                                          
    "EXECIO * DISKW OUTZ (FINIS"                                  
    QUEUE ""                                                      
  END                                                          
  WHEN PART.I = 'USINEVAL' THEN                                
  DO                                                          
    QUEUE SG.I ' ' DISK.I                                      
    "EXECIO * DISKW OUTV (FINIS"                              
    QUEUE ""                                                  
  END                                                          
  WHEN PART.I = 'USINEPRE' THEN                                
  DO                                                          
    QUEUE SG.I ' ' DISK.I                                      
    "EXECIO * DISKW OUTW (FINIS"                              
    QUEUE ""                                                  
  END                                                          
  WHEN PART.I = 'USINERET' THEN                                
  DO                                                          
    QUEUE SG.I ' ' DISK.I                                      
    "EXECIO * DISKW OUTU (FINIS"                              
    QUEUE ""                                                  
  END                                                          
   OTHERWISE DO                                    
                EXIT                                
             END                                    
  END                                              
 "EXECIO 0 DISKW IN (FINIS"                        
 END                                                

 


and the step :


//ENVIR01  EXEC PGM=IKJEFT01,DYNAMNBR=30,REGION=5000K        
//SYSEXEC  DD DISP=SHR,DSN=NONPROD.UT40.OUTIL.INITCLJB      
//IN       DD DISP=SHR,DSN=NONPROD.DORSCLD.RETDISK          
//SYSTSPRT DD SYSOUT=*                                      
//OUTB     DD DISP=SHR,DSN=BSHREXP.DORSCLD.ENVIR            
//OUTD     DD DISP=SHR,DSN=DSHREXP.DORSCLD.ENVIR            
//OUTG     DD DISP=SHR,DSN=GSHREXP.DORSCLD.ENVIR            
//OUTH     DD DISP=SHR,DSN=HSHREXP.DORSCLD.ENVIR            
//OUTK     DD DISP=SHR,DSN=KSHREXP.DORSCLD.ENVIR            
//OUTL     DD DISP=SHR,DSN=LSHREXP.DORSCLD.ENVIR            
//OUTN     DD DISP=SHR,DSN=NSHREXP.DORSCLD.ENVIR            
//OUTO     DD DISP=SHR,DSN=OSHREXP.DORSCLD.ENVIR            
//OUTP     DD DISP=SHR,DSN=PSHREXP.DORSCLD.ENVIR            
//OUTS     DD DISP=SHR,DSN=SSHREXP.DORSCLD.ENVIR            
//OUTU     DD DISP=SHR,DSN=USHREXP.DORSCLD.ENVIR            
//OUTV     DD DISP=SHR,DSN=VSHREXP.DORSCLD.ENVIR            
//OUTW     DD DISP=SHR,DSN=WSHREXP.DORSCLD.ENVIR            
//OUTZ     DD DISP=SHR,DSN=ZSHREXP.DORSCLD.ENVIR            
//SYSTSIN  DD *              
 %AORSCLD1                  
//*                          
 


the error is :


     4 *-* DO I=3 TO DT.0                    
IKJ56500I COMMAND SG3 NOT FOUND              
READY                                        
END                                          

 


and the step is abended with a RC=12

SG3 is the last line of thee input dataset :



//IN       DD DISP=SHR,DSN=NONPROD.DORSCLD.RETDISK    
 


the con,tent is ::


 VIEW       NONPROD.DORSCLD.RETDISK                      
 Command ===>                                            
 ****** ***************************** Top of Data ********
 000001 SGPRO        TOTO1  PROBTP                        
 000002 SGPRO        TOTO2  PROBTP                        
 000003 SGPRO        TOTO3  PROBTP                        
 000004 SGPRO        TOTO4  PROBTP                        
 000005 SGPRO        TOTO5  PROBTP                        
 000006 SG1          TOTO6  LOURMEL                      
 000007 SG2          TOTO7  IRP                          
 000008 SG3          TOTO8  HACTIF                        
 ****** **************************** Bottom of Data ******

 


Thank's for your help

Re: COMMAND NOT FOUND

PostPosted: Fri Sep 06, 2019 7:49 pm
by willy jensen
Never ever use "EXECIO * DISKW OUTW (FINIS", always specify a number, preferably the function QUEUED(). The * DISKW will stop at a null value in the stack, no matter how many more stacked entries there might be. I assume that this is your problem as TSO will try to execute any stacked records after your program has ended.

Re: COMMAND NOT FOUND

PostPosted: Fri Sep 06, 2019 11:15 pm
by sergeyken
This is senseless and useless series of statements:
. . . . . .
    "EXECIO * DISKW . . . .  (FINIS"                  
    QUEUE ""
 . . . . . . .

After the first of EXECIO is executed, a null-line is placed into program stack.

Next, the following group of
 DO                                              
    QUEUE SG.I ' ' DISK.I                        
    "EXECIO * DISKW OUTx (FINIS"                  
    QUEUE ""                                      
  END                                            

will do the following:
    - place new line at the stack end
    - extracts first empty line from the stack, which causes the output file to close
    - just placed line in the stack becomes the first one
    - new empty line is placed at the end of the stack

Next, the following group of similar code
    - adds new line at the end of stack
    - extracts the first line (created by previous group!) from the stack, and writes it to the wrong file!
    - new empty line is placed at the end of stack
Etc.

Finally, the content of all used files is complete mess of unexpected lines, and/or empty data.

Correct way of use the program stack to perform output is as follows:
 DO                                                                
    "NEWSTACK"
    QUEUE SG.I ' ' DISK.I  
    . . . add more lines to the stack; also null lines are allowed thanks to Queued() below! . . .                                    
    "EXECIO" Queued() "DISKW OUTx (FINIS"                                    
    "DELSTACK
  END        


Besides of this, if the same file is used more than once, its previous content is overwritten with new line because neither DISP=MOD nor DISP=NEW is used in DD statements.

Re: COMMAND NOT FOUND

PostPosted: Fri Sep 06, 2019 11:25 pm
by samb01
Hello and thank you sergey for thé explanation.
I Will correct it on monday and then tell you à out the result.

Re: COMMAND NOT FOUND

PostPosted: Sat Sep 07, 2019 2:07 am
by sergeyken
There are so many senseless, ineffective, and just wrong issues - I'm lazy to explain.

I would do it in this manner:
/* REXX */                                                          
                                                                   
MaxError = 0                                                        
"NEWSTACK"     /* separate new stack from outer world */            
                                                                   
"EXECIO * DISKR IN (FINIS"       /* Read all input into stack */    
If RC > 0 Then Do                                                  
   Say "Error" RC "while reading //IN file"                        
   MaxError = 12                                                    
   Signal GoOut                                                    
End                                                                
                                                                   
PartNames = 'AGRICA' ,                                              
            'AUDIENS' ,                                            
            'B2V URCREP' ,                                          
            'NHCBTP BNPCAR VRF' ,                                  
            'PROBTP MNRA CRP REGARD SEVEANE' ,                      
            'DVLP SICAP' ,                                          
            'HACTIF GIP' ,                                          
            'HDS SHDS' ,                                            
            'IRP' ,                                                
            'LOURMEL' ,                                            
            'PREPROD' ,                                            
            'USINEVAL' ,                                            
            'USINEPRE' ,                                            
            'USINERET'                                              
FileNames = 'OUTK' ,                                                
            'OUTO' ,                                                
            'OUTB OUTB' ,                                          
            'OUTN OUTN OUTN' ,                                      
            'OUTP OUTP OUTP OUTP OUTP' ,                            
            'OUTD OUTD' ,                                          
            'OUTH OUTH' ,                                          
            'OUTS OUTS' ,                                          
            'OUTG' ,                                                
            'OUTL' ,                                                
            'OUTZ' ,                                                
            'OUTV' ,                                                
            'OUTW' ,                                                  
            'OUTU'                                                    
                                                                       
Do i = 1 By 1 While Queued() > 0                                      
   /* split stack line into three first words */                      
   Parse Pull SG Disk Part .                                          
                                                                       
   PartPos = WordPos( Part, PartNames )  /* verify validity */        
   If PartPos = 0 Then Do                                              
      Say "Error: Part Name from line" i "not allowed: '"Part"'"      
      MaxError = 8                                                    
      Iterate i         /* skip, and proceed to next input */          
   End                                                                
   FileName = Word( FileNames, PartPos)                                
                                                                       
   Push SG ' ' Disk  /* create new line at the top of program stack */
   "EXECIO 1 DISKW" FileName /* write 1 line to appropriate file */    
   If RC > 0 Then Do                                                  
      Say "Error" RC "while writing file //"FileName                  
      MaxError = 12                                                    
      Signal GoOut                                                    
   End                                                                
                                                                       
 End i                                                                
                                                                       
 /* Close all files at the end */                                      
 ClosedList = ''                                                      
 Do i = 1 To Words(FileNames)                                          
    NextFile = Word( FileNames, i)                                    
    If WordPos( NextFile, ClosedList ) > 0 Then /* already closed? */  
       Iterate i         /* proceed to the next file name */          
                                                                       
    "EXECIO 0 DISKW" NextFile "(FINIS"                                
    If RC > 0 Then Do                                                  
       Say "Error" RC "while closing file //"NextFile"; ignored"      
    End                                                                
    ClosedList = CloseList NextFile   /* keep already closed names */  
 End i                                                                
                                                                       
GoOut:                                                                  
"DELSTACK"         /* clean-up stack usage */                          
 Return MaxError                                                        
/**********************************************************************/
 

Re: COMMAND NOT FOUND

PostPosted: Sat Sep 07, 2019 4:18 pm
by samb01
Hello sergey. It's an other way To code in rexx but i think it's the flight way.
I Airways use to write : execio * diskw. Now i know it's not the right way To code.
So thank's for tour help and your example.

Re: COMMAND NOT FOUND

PostPosted: Sun Sep 08, 2019 8:02 pm
by sergeyken
samb01 wrote:Hello sergey. It's an other way To code in rexx but i think it's the flight way.
I Airways use to write : execio * diskw. Now i know it's not the right way To code.
So thank's for tour help and your example.

Your problem is not in EXECIO command syntax.

Your problem is: serious lack of understanding of the basic programming concepts, and algorithms. It has nothing to do neither with any specific statement, nor with any specific language, at all...

Re: COMMAND NOT FOUND

PostPosted: Tue Sep 10, 2019 10:29 pm
by samb01
Hello.
My code works just by removing : queue ""
Thank's for your help

Re: COMMAND NOT FOUND

PostPosted: Wed Sep 11, 2019 12:08 am
by sergeyken
samb01 wrote:Hello.
My code works just by removing : queue ""
Thank's for your help


Reminder: in this manner it will work properly only if
    - DD SYSOUT=* has been used for output
    - DD DISP=NEW has been used for output
    - DD DISP=MOD has been used for output

When using DISP=SHR, DISP=OLD, or DSORG=PO - then each output portion will include only one last record of this group.

If you don't care, the I don't care, too.

Re: COMMAND NOT FOUND

PostPosted: Wed Sep 11, 2019 8:39 pm
by samb01
Sorry but as you can see, my output dataset are in SHR and it works :


//OUTB     DD DISP=SHR,DSN=BSHREXP.DORSCLD.ENVIR            
//OUTD     DD DISP=SHR,DSN=DSHREXP.DORSCLD.ENVIR            
//OUTG     DD DISP=SHR,DSN=GSHREXP.DORSCLD.ENVIR            
//OUTH     DD DISP=SHR,DSN=HSHREXP.DORSCLD.ENVIR            
//OUTK     DD DISP=SHR,DSN=KSHREXP.DORSCLD.ENVIR            
//OUTL     DD DISP=SHR,DSN=LSHREXP.DORSCLD.ENVIR            
//OUTN     DD DISP=SHR,DSN=NSHREXP.DORSCLD.ENVIR            
//OUTO     DD DISP=SHR,DSN=OSHREXP.DORSCLD.ENVIR            
//OUTP     DD DISP=SHR,DSN=PSHREXP.DORSCLD.ENVIR            
//OUTS     DD DISP=SHR,DSN=SSHREXP.DORSCLD.ENVIR            
//OUTU     DD DISP=SHR,DSN=USHREXP.DORSCLD.ENVIR            
//OUTV     DD DISP=SHR,DSN=VSHREXP.DORSCLD.ENVIR            
//OUTW     DD DISP=SHR,DSN=WSHREXP.DORSCLD.ENVIR            
//OUTZ     DD DISP=SHR,DSN=ZSHREXP.DORSCLD.ENVIR          
 


but i can't understand what is for you "output portion (sorry for my english...)