Equivalenza COBOL di ITER dell'RPG

di il
9 risposte

Equivalenza COBOL di ITER dell'RPG

Ciao a tutti,
esiste una costrutto COBOL che sia equivalente all'istruzione RPG ITER inserita all'interno di un DO?
Preciso che devono essere rispettati i criteri della c.d. programmazione strutturata, quindi, p. es., niente GO TO ma solo PERFORM, EVALUATE, IF, ecc.
Per meglio chiarire, se devo estrarre da una tabella DB un gruppo omogeneo di rk che rispettino un insieme di condizioni in RPG scrivo:
                  DO   *HIVAL
        refkey	  READEmiofile                 53
53                LEAVE
        fld1      IFEQ 0
                  ITER
                  ENDIF
        fld2      IFEQ 'FISSO1'
        fld2	  OREQ 'FISSO2'
                  ITER
                  ENDIF
        fld3	  IFEQ 0
        date1	  IFGT date2
                  ITER
                  ENDIF
                  ELSE
        date3     IFLE date4
                  ITER
                  ENDIF
                  ENDIF
                  ENDIF
		  .
		  . job da eseguire
		  .
		  ENDDO
(refkey è una chiave parziale per accedere a miofile).

E in COBOL come andrebbe scritto?
TIA

P.S. nell'anteprima vedo che va a farsi benedire l'incolonnamento dell'RPG. Vi chiedo uno sforzo d'immaginazione.
P.S del P.S. - C'è un modo per ovviare all'inconveniente?
Ancora TIA

9 Risposte

  • Re: Equivalenza COBOL di ITER dell'RPG

    Per rendere più leggibile il codice usa il tag "codice"
  • Re: Equivalenza COBOL di ITER dell'RPG

    Puoi tradurre le istruzioni RPG in COBOL, mantenendo la struttura di annidamento, ad esempio, per gli aspetti condizionali:
    
    fld1 IFEQ 0  			IF fld1  IS EQUAL TO 0   
    
    fld2 IFEQ 'FISSO1'
    fld2 OREQ 'FISSO2'		IF (fld2 = 'FISSO1' OR 'FISSO2')
    
    date1 IFGT date2		IF date1 IS GREATER THAN date2 THEN
    
    date3 IFLE date4		IF date3 IS LESS THAN OR EQUAL TO date4 THEN
    
    mentre ELSE rimane invariato ed ENDIF tradotto in END-IF


    Per quanto riguarda il ciclo:
    
    DO *HIVAL
    	refkey READEmiofile 53
    	...
    	
    	.
    	. job da eseguire
    	.
    ENDDO
    
    lo puoi implementare con:
    
    SET FILE-NOT-EOF TO TRUE
    PERFORM UNTIL FILE-EOF
      READ FILE
        AT END
          SET FILE-EOF TO TRUE
        NOT AT END
          PERFORM JOB-DA-ESEGUIRE
      END-READ
    END-PERFORM
    
    Per quanto riguarda l'operazione ITER che trasferisce il controllo dall'interno di un gruppo DO o FOR all'istruzione ENDDO o ENDFOR
    puoi (separando i vari costrutti, nelle PERFORM) impiegare
    
    PERFORM ...
    	IF ...
    		EXIT PERFORM
    	ELSE
    		...
    	END-IF
    END-PERFORM
    
  • Re: Equivalenza COBOL di ITER dell'RPG

    Per rendere più leggibile il codice usa il tag "codice"
    Grazie mille per la dritta

    @willy55
    il mio problema è come rendere in modo 'astuto' l'istruzione ITER dell'RPG in COBOL e senza l'uso di "GO TO".
    Sicuramente ti sarà sfuggito per il deplorevole modo con cui ho copiato il codice RPG.
    Grazie per la vostra pazienza.
  • Re: Equivalenza COBOL di ITER dell'RPG

    COBOL_Forever ha scritto:


    Ciao a tutti,
    esiste una costrutto COBOL che sia equivalente all'istruzione RPG ITER inserita all'interno di un DO?
    Curiosità: che distribuzione COBOL utilizzi ?
  • Re: Equivalenza COBOL di ITER dell'RPG

    Per tutti,
    ho riformattato il msg originale per rendere più leggibile il codice. (Grazie a surfenet)
    Curiosità: che distribuzione COBOL utilizzi ?
    @neapolis
    non è una distribuzione, io lavoro su sistemi IBM i che hanno il COBOL e l'RPG nativi installati come moduli del s.o. iOS 7.x
  • Re: Equivalenza COBOL di ITER dell'RPG

    @willy55
    ti devo delle scuse, nel post avevo replicato che ti era sfuggita l'istruzione ITER; invece sono io che non ho visto tutta la tua risposta.
    Comunque, l'istruzione EXIT PERFORM il compilatore COBOL che uso (sistemi IBM i) non la prevede . Quali sono le versioni che implementano questa istruzione?
    Dovrò rassegnarmi a usare il GO TO .
    Grazie a tutti
  • Re: Equivalenza COBOL di ITER dell'RPG

    Tieni presente che se la istruzione "EXIT PERFORM" non è implementata nel tuo linguaggio COBOL, puoi realizzare lo stesso costrutto (di uscita dal ciclo) valutando le varie condizioni, in sequenza, affinchè si giunga ad effettuare, esclusivamente, il "job da eseguire" (che ti interessa) ed avere come alternativa la continuità nel ciclo
    Schematicamente:
    
         IF NOT (fld1  IS EQUAL TO 0) AND
    	NOT (fld2 = 'FISSO1') AND
            NOT (fld2 = 'FISSO2') AND
    	NOT (fld3  IS EQUAL TO 0) AND  
    	NOT (date1 IS GREATER THAN date2) AND
    	NOT (date3 IS LESS THAN date4) AND
    	NOT (date3 IS EQUAL TO date4)  THEN
    
    		PERFORM JOB-DA-ESEGUIRE
          ELSE
    		' ... Continua nel ciclo
    
          END-IF
    
    Per quanto riguarda i compilatori COBOL che supportano l'istruzione "EXIT PERFORM", ve ne sono vari, te ne cito alcuni:
    https://www.ibm.com/support/knowledgecenter/SS6SG3_6.3.0/migrate/igymsoacb52.html
    https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzasb/rlpsexperf.htm
    https://supportline.microfocus.com/documentation/books/nx60/lhpdf907.htm
    https://bs2manuals.ts.fujitsu.com/psCOBOL2000V16en/cobol2000-reference-manual-13781/procedure-division-cobol-compiler-reference-manual-177/statements-cobol-compiler-reference-manual-200/exit-perform-statement-cobol-compiler-reference-manual-218
    https://srinimf.com/2015/04/08/cobol-2000-change-in-perform/
  • Re: Equivalenza COBOL di ITER dell'RPG

    @willy
    il secondo link è quello che mi riguarda:
    EXIT PERFORM equivale a LEAVE
    EXIT PERFORM CYCLE equivale a ITER
    purtroppo fa riferimento alla versione di IBM i 7.4 mentre io attualmente ho in uso la 7.3 . Cambiare release è sempre un'attività impegnativa, tanto denaro e tanto lavoro. Mi sa che mi tengo quello che ho.
    Grazie per il tuo preziosissimo aiuto.
  • Re: Equivalenza COBOL di ITER dell'RPG

    Scusate iter in rpg e' uguale a continue in cobol

    che bello RPG mi hai fatto fare un meraviglioso salto indietro.........quanto rimpiango quei tempi.
Devi accedere o registrarti per scrivere nel forum
9 risposte