[COB]Comment faire 2 boucles imbriquées ?

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [COB]Comment faire 2 boucles imbriquées ?

Message  Hana le Dim 24 Avr 2011, 14:52

Dans mon projet de cobol, j'ai voulu faire quelque chose de la forme :

Code:

PERFORM UNTIL EOF = "1"
    ...
    ...
    PERFORM 1-Decodage
        VARYING debut FROM debut BY 1 UNTIL debut > fin
    END-PERFORM
    ...
    ...
END-PERFORM

Mais lorsque je soumets le job j'obtiens le message suivant:

Code:
RO  14.34.06 JOB24762 $HASP165 ANDR204  ENDED AT PRD1 - ABENDED S322 U0000

Est-ce la bonne façon de faire deux boucles imbiquées ? D'où vient le problème et comment faire pour le résoudre ?

Merci d'avance pour vos réponses Smile


Dernière édition par Hana le Mer 27 Avr 2011, 20:56, édité 1 fois

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  Terminatour le Dim 24 Avr 2011, 16:14

salutations,

je citerai

2.1.10 ABEND CODE 322

1. ERROR ID: none
2. DESCRIPTION: Execution of a job, job step, or catalogued procedure step took longer than the time specified. If no time was specified in the TIME parameter on your jobcard, the job was given the default value of 30 seconds.

3. CORRECTIVE PROCEDURE: Check for program errors, such as endless loops. Correct any such errors and rerun the job. If no such errors were found, increase the time and rerun the job.

Si cela ne t'aides pas, je te conseillerai de vérifier que tu mets bien ta variable EOF à 1 au moment approprié.
Sinon, une découverte mystique, que j'ai un jour fait concerne le JCL, en effet si tu ouvres un fichier qui n'existe pas, il risque de provoquer la même erreur. (il essaie d'ouvrir à l'infini ?)

king

Terminatour

Nombre de messages : 344
Age : 25
Prénom : Louis-Julien
Statut : statutaire
Localisation : localisée
Date d'inscription : 04/10/2009

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  efo le Dim 24 Avr 2011, 17:09

PERFORM UNTIL EOF = "1"
...
...
PERFORM 1-Decodage
VARYING debut FROM debut BY 1 UNTIL debut > fin
END-PERFORM
...
...
END-PERFORM

L'abend 322 est un bouclage (cpu time limit).
Comme ils sont écrits, il y a effectivement problème avec le 2ème perform. Le end-perform a pour but de terminer un perform en ligne. Ce n'est pas le cas ici puisqu'il y a demande d'exécution du paragraphe 1-decodage. Si comme je le pense, le end-perform 'interne' termine le perform until eof = "1", le pgme ne repassera jamais par la lecture et donc bouclage assuré.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  Hana le Dim 24 Avr 2011, 17:39

Merci pour vos réponses Smile

Effectivement le problème vient du deuxième PERFORM puisqu'en le mettant en commentaire le job s'exécute sans problème. J'ai donc essayé d'enlever le END-PERFORM mais le problème persiste Crying or Very sad

Et juste pour préciser, à l'intérieur du paragraphe 1-Decodage il n'y a rien d'autre qu'une instruction MOVE qui ne modifie pas les variables concernées par le PERFORM.

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  efo le Dim 24 Avr 2011, 18:09


PERFORM 1-Decodage
VARYING debut FROM debut BY 1 UNTIL debut > fin

Il est bizarre ce perform varying : tu fais varier debut à partir de debut. le 1er et le 3ème debut devraient être remplacés par une autre variable. En logique, on ne dit pas : Pour i de i à ...

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  Hana le Dim 24 Avr 2011, 19:26

Voilà mon code après modifications :

Code:
PERFORM 1-Decodage                         
    VARYING iMC FROM debut BY 1 UNTIL iMC > fin

Et toujours le même problème...

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  efo le Dim 24 Avr 2011, 19:47

Si c'est toujours un abend 322, je ne peux rien dire de plus sans voir plus de code : que contiennent le perform until eof, le 1-decodage ?
Des display bien choisis pourraient te permettre de voir si les valeurs des variables sont normales, si la relecture est bien faite, ..., en définitive où le pgme boucle exactement.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  LSV le Lun 25 Avr 2011, 12:13

note que si tu ne sais pas faire un perform varying, tu peux sans doute faire

perform blablabla until compteur = 10

par exemple, et dans ton paragraphe blablabla incrémenter le compteur Very Happy

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  Hana le Mar 26 Avr 2011, 20:22

Je vous mets les deux paragraphes concerné par le problème :

Code:
  1-MsgSecret.                                           
      MOVE 1 TO iMD                                     
      PERFORM UNTIL eof = "1"                           
          COMPUTE                                       
              longueur = fin - debut                     
          END-COMPUTE                                   
          MOVE debut TO iMC                             
          PERFORM 2-Decodage                             
              UNTIL iMC > fin                           
 *          VARYING iMC FROM debut BY 1 UNTIL iMC > fin
          READ codes                                     
              AT END MOVE "1" TO eof                     
          END-READ                                       
      END-PERFORM                                       
      .                                                 
  2-Decodage.                                           
      MOVE 1 TO iA                                       
      ADD 1 TO iMC
      .

Vous pouvez voir que j'ai essayé avec un PERFORM UNTIL à la place du PERFORM VARYING mais cela ne change rien au résultat, toujours un code 322. Si je comprends bien, le 2ème PERFORM est une boucle infini mais je ne comprends pas du tout pourquoi.

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  efo le Mar 26 Avr 2011, 23:01

Bonsoir, en voyant le code, je reste un peu perplexe et me dit qu'il faudrait également les déclarations pour émettre un avis. Je crains une erreur size (non gérée dans les opérations arithmétiques) qui fait qu'il est impossible de sortir de décodage. Seule une vision plus large du code, ce mercredi par ex.) me permettra d'en dire plus.

efo

Nombre de messages : 125
Age : 59
Prénom : Eric
Localisation : tournai
Date d'inscription : 08/08/2007

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  Hana le Mer 27 Avr 2011, 20:55

J'ai corrigé les déclarations et ça fonctionne correctement maintenant. Merci pour votre aide Very Happy

Hana

Nombre de messages : 40
Prénom : Quynh Anh
Date d'inscription : 29/03/2011

Revenir en haut Aller en bas

resolu Re: [COB]Comment faire 2 boucles imbriquées ?

Message  Contenu sponsorisé Aujourd'hui à 20:43


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum