IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

Nombre d'OCCURS en dynamique


Sujet :

Cobol

  1. #1
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 061
    Points
    32 061
    Par défaut Nombre d'OCCURS en dynamique
    Bonjour

    Je dois actuellement développer dans le cadre de mon activité professionelle un batch qui génère du XML. Le truc, c'est que les specs sont en retard. J'en suis donc à fabriquer un moteur.....dont le dimensionnement sera vraisemblablement à revoir.

    Afin d'industrialiser tout ça, j'use et j'abuse de la fonction LENGTH OF. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                     20 XML-SUBJECT                    PIC X(0100).
          *                                                   
                  MOVE XML-SUBJECT            TO CHAINE-ECRITE
                  MOVE LENGTH OF XML-SUBJECT  TO LONGUEUR-LUE
    et le compilateur remplacera LENGTH OF par 100, ou autre chose si ma définition change.

    Mon souci est que j'aimerais faire le même genre de manip avec des occurs. J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
                        25 XML-LIGNES OCCURS 15.                   
                           30 XML-NOM-LIGNE            PIC X(0004).
                           30 XML-LIGNE                PIC X(0226).
    
    
               SET W-SORTIE-KO TO TRUE      
               MOVE  +00 TO I               
               PERFORM UNTIL W-SORTIE-OK    
                  ADD  +01 TO I             
                  IF I > 15                 
                     SET W-SORTIE-OK TO TRUE
                  ELSE                      
    -  -  -  -  -  -  -  -  -  -  -  -  -  -
                  END-IF                    
               END-PERFORM
    et j'aimerais remplacer ce 15 par une fonction du même type que LENGTH OF, parceque ça ne restera sans doute pas à 15.

    Vous avez des idées?
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Utilise les tableaux longueur variable (Occurs Depending On).

    Code Extrait doc IBM ILE Cobol pour iSeries : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    01 EMPLOYEE-TABLE.
        05 EMP-COUNT PIC 9(4).
        05 EMPLOYEE-RECORD OCCURS 1 TO 1000 TIMES DEPENDING ON EMP-COUNT.
           10 HOURS PIC +9(5)E+99.

  3. #3
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 061
    Points
    32 061
    Par défaut
    hmmm, je vais voir..... Je préfèrerais un truc en dur, avec un valeur en dur dans la COPY de description de données(histoire de ne pas avoir à toucher au code), mais je vais essauyer ta solution.

    Merci, en tous cas.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  4. #4
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Dans le cas où tu n'as aucune idée sur le max de l'occurs de ton tableau, utilise alors un fichier avec une identification des enregistrements appartenant à la même entité et comme ça tu n'as aucun problème de dimension (ici nombre d'enregistrements)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Même si ça ne répond pas complètement à ta question, je te conseillerais de toutes façon de ne jamais laisser un "15" dans une boucle comme tu l'as fait.

    Mieux vaut utiliser une constance du genre WS-NB-MAX-XXXX.

    Pour traiter ton problème, tu peux faire comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                        25 XML-LIGNE-GRP.
                           30 XML-LIGNES OCCURS 15.                   
                              35 XML-NOM-LIGNE            PIC X(0004).
                              35 XML-LIGNE                PIC X(0226).
    puis en initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    COMPUTE WS-NB-MAX-LIGNES = (LENGTH OF XML-LIGNE-GRP) / (LENGTH OF XML-LIGNES)

  6. #6
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 061
    Points
    32 061
    Par défaut
    Merci beaucoup Fremen, c'est exactement ce que je cherchais ==> Résolu(et j'aurais du y penser moi-même.....)

    Mais bien sur, je n'avais pas l'intention de laisser ce 15 traîner, c'est sale...
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Pas de quoi

    Ceci étant, on parle ici de "dynamique", c'est un abus de langage, puisque la taille du tableau ne change pas pendant l'exécution du programme.

    De ce point de vue, la réponse d'Hédhili Jaïdane correspondait plus à la notion de tableau à taille dynamique, même si ce n'était pas vraiment ton besoin...

  8. #8
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 061
    Points
    32 061
    Par défaut
    mmh, mon titre était en effet trompeur, je m'en excuse. le "Dynamique" ne concerne pas l'execution du programme, en effet.

    Par contre, je garde sa solution en mémoire, je pourrais en avoir besoin à d'autres occasions. Merci à tous les deux.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  9. #9
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    j'aurais fait un truc du genre te permettant d'avoir ton nbr d'occurs max calculé dynamiquement en fonction du nombre d'occurs que tu indiques dans ta description. Plus (mais ça c'est mes "tic" de programmation perso), une simplification du coding de ta boucle..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    01 max-i pic s9(9) comp.
    25 XML-LIGNES OCCURS 15.   
               26  toto.     
                           30 XML-NOM-LIGNE            PIC X(0004).
                           30 XML-LIGNE                PIC X(0226).
    
               compute max-i = length of xml-lignes / length of toto
               perform varying i from 1 by 1 until i > max-i
                .....
                .....
               end-perform

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 31
    Points : 33
    Points
    33
    Par défaut tableau cobol
    Citation Envoyé par fremen167 Voir le message
    Pas de quoi

    Ceci étant, on parle ici de "dynamique", c'est un abus de langage, puisque la taille du tableau ne change pas pendant l'exécution du programme.

    De ce point de vue, la réponse d'Hédhili Jaïdane correspondait plus à la notion de tableau à taille dynamique, même si ce n'était pas vraiment ton besoin...
    bonjour ,
    pourriez vous m'expliquer cette ligne
    05 variable
    occurs 0 to 22 depending on var2
    merci

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 765
    Points
    10 765
    Par défaut
    Cela signifie que le tableau contient de 0 à 22 lignes et la variable qui contient le nombre de lignes est "var2".

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Darkzinus Voir le message
    Cela signifie que le tableau contient de 0 à 22 lignes et la variable qui contient le nombre de lignes est "var2".
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Schema] Ajouter un nombre d'occurence
    Par GLDavid dans le forum Valider
    Réponses: 2
    Dernier message: 28/11/2005, 13h36
  2. Réponses: 28
    Dernier message: 22/09/2005, 11h57
  3. Nombre d'occurence d'un motif par ligne
    Par anne-so dans le forum Langage
    Réponses: 8
    Dernier message: 22/08/2005, 19h36
  4. Réponses: 8
    Dernier message: 18/01/2005, 10h58
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo