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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    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?

  2. #2
    Membre Expert
    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
    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 confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    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.

  4. #4
    Membre Expert
    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
    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 chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    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 confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    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...

+ 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