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 :

Questions diverses + structures


Sujet :

Cobol

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Questions diverses + structures
    Bonjour tout le monde,

    Nous somme occupés à étudier les fichiers en Cobol.

    J'essaie d'analyser un code que nous avons reçu mais il y'a certaines choses que je ne comprends pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FILE SECTION.                         
    FD FICH-SAI.                          
    
    01 TABLE-SAI.                         
       02 TAB-FICH-SAI.                   
          88 FIN-SAI   VALUE HIGH-VALUES. 
       03 SAI-CHIFR PIC 9 OCCURS 10 TIMES.
    Je ne comprends pas ce qu'est ce FD FICH-SAI. ?

    Ensuite, on crée une structure qui est nommée TABLE-SAI

    Je présûme que 02 redéfinie 01 ?

    Le 88 est un nom condition, sauriez-vous me dire à quoi ça sert ici ?

    Et le 03 je pense que l'on crée un tableau avec 10 cases ?

    Je mets le code en entier en attaché.

    Merci d'avance pour votre aide so precious.

    beegees

  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
    Salut beegees.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    FILE SECTION.                         
    FD FICH-SAI.                          
    01 TABLE-SAI.                         
       02 TAB-FICH-SAI.                   
          88 FIN-SAI   VALUE HIGH-VALUES. 
       03 SAI-CHIFR PIC 9 OCCURS 10 TIMES.
    Je ne comprends pas ce qu'est ce FD FICH-SAI. ?
    C'est la Description du Fichier (ou Définition) qui a été déclaré par un SELECT. Cette clause est obligatoire et est toujours associée au SELECT.
    Ensuite, on crée une structure qui est nommée TABLE-SAI
    01 TABLE-SAI. Oui, c'est une structure de données un peu particulière. C'est le nom du format d'enregisrement du fichier déclaré au dessus. Record format name. On dit aussi dessin d'enregistrement. C'est le nom de l'espace mémoire alloué au fichier au moment de son ouverture par l'OS. On dit aussi Buffer Entrée/Sortie. C'est une zone "système" mais associée au programme.
    Je présûme que 02 redéfinie 01 ?
    Non et Oui. Non, TAB-FICH-SAI est une sous structure de TABLE-SAI. Ce niveau 02 et les autres niveaux 02 constituent la totalité de TABLE-SAI. Comme il est le seul on peut dire Oui.
    Le 88 est un nom condition, sauriez-vous me dire à quoi ça sert ici ?
    Comme il porte sur le niveau de structure qui le précède, FIN-SAI est "VRAI" si et seulement si TAB-FICH-SAI contient des HIGH-VALUE (X'FF' en EBCDIC) dans tous ses cractères. (Ce cas est particulier et constitue une facilité parce que le niveau 88 s'applique en principe à une zone élémentaire (suivie d'un PIC...)).
    Au lieu de tester :
    IF TAB-FICH-SAI = ALL HIGH-VALUE InstructionImpérative (parfois sans le ALL en fonction du compilateur),
    on testera IF FIN-SAI InstructionImpérative
    Et le 03 je pense que l'on crée un tableau avec 10 cases ?
    Celà veut dire que TAB-FICH-SAI est à son tour décomposée en SAI-CHIFR d'un seul caractère numérique répétée 10 fois. Ces dix postes (cases) forment effectivement un tableau.

    Ca te va comme réponse ?

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut Hédhili,

    Un super grand merci pour ta réponse hyper complète.

    Ca te va comme réponse ?
    Oui merci, la première lecture me dit que je vais comprendre ce que je ne comprenais pas.

    Si jamais il y'a quelque chose que je comprends pas, je reviendrai.

    Encore un grand merci à toi.

    beegees

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Rebonjour Hédhili,

    Je relis attentivement ton message et quelques questions me viennent à l'esprit :

    C'est la Description du Fichier (ou Définition) qui a été déclaré par un SELECT. Cette clause est obligatoire et est toujours associée au SELECT.
    Est-ce que cela veut dire que je dois mettre obligatoirement le même nom dans le select et dans le fd ?

    Par contre, ici, j'ai plus de mal de compréhension :

    Le 88 est un nom condition, sauriez-vous me dire à quoi ça sert ici ?
    Comme il porte sur le niveau de structure qui le précède, FIN-SAI est "VRAI" si et seulement si TAB-FICH-SAI contient des HIGH-VALUE (X'FF' en EBCDIC) dans tous ses cractères. (Ce cas est particulier et constitue une facilité parce que le niveau 88 s'applique en principe à une zone élémentaire (suivie d'un PIC...)).
    Au lieu de tester :
    IF TAB-FICH-SAI = ALL HIGH-VALUE InstructionImpérative (parfois sans le ALL en fonction du compilateur), on testera IF FIN-SAI InstructionImpérative
    Donc il faut qu'il y'ait des valeurs maximales partout ? désolé mais j'ai pas bien compris ce point.

    Merci sincèrement pour tout.

    beegees

  5. #5
    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
    Citation Envoyé par beegees Voir le message
    ...
    Est-ce que cela veut dire que je dois mettre obligatoirement le même nom dans le select et dans le fd ?
    Oui.
    ...
    Donc il faut qu'il y'ait des valeurs maximales partout ?
    En principe : Oui. Les Constantes Figuratives, HIGH-VALUE, LOW-VALUE, ZERO(S), SPACE(S), se comportent comme UN seul caractère ou TOUS les caractères. J'ai vu des variantes en fonction des compilateurs. Mais ce n'est pas grave, ça dépend de ce que tu mets.
    Puisque tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    READ FICH-SAI
                  AT END SET FIN-SAI TO TRUE
               END-READ.
    ((et là j'ai beaucoup de doutes)) (*)
    et donc est "VRAI" quand tu es en fin de fichier et que tu n'as pas d'autres tests ailleurs que dans le PERFORM.

    (*) En principe, les conditions définies par un niveau 88 ne peuvent pas être utilisées dans un SET, c'est le contenu des zones sur lesquelles elles sont définies qui les positionne à "TRUE" ou "FALSE" et non pas l'inverse, mais si ton compilateur le permet, tant mieux. Par contre tu peux utiliser les variables logiques (booléennes), on dit aussi des indicateurs, des flags, des drapeux,etc... :

    01 mazone pic 1.

    Et puis, il n'y a pas de quoi me remercier, tout le plaisir est pour moi à chaque que je peux aider. Je considère cela comme un devoir.

  6. #6
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Rebonjour Hédhili,

    Merci pour tes explications complémentaires.

    Pour le fd, s'est bon à savoir.

    Pour ce qui est des HIGH VALUES, je vais relire attentivement ton message mais je pense que ça devrait aller.

    Pour l'instant je ne peux que te remercier mais j'espère pouvoir t'envoyer une petite bôite de chocolat après mon examen de juin pour te remercier de m'avoir aidé à réussir mon examen de COBOL en Janvier (89%) et je pense que ça devrait aller aussi en Juin.



    beegees

  7. #7
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Bonjour,
    Rien à redire sur les réponses précédentes, complètes.
    Comme indiqué avant, on valorise plutôt des niveaux 88 sur des zones élémentaires, le fait de mettre à High-Value le buffer de lecture est plus usuellement utilisé sur des typologies de ruptures sur comparaisons de fichiers.
    Toutefois, et si ça peut t'aider pour ton exam, si on résume ce que fait ce programme :
    Calcul de la moyenne maximale des deux chiffres consécutifs dans un tableau de 10 occurrences, se répétant dans les différentes lignes d'un fichier, j'ajouterai que si on veut être puriste, il est inutile de calculer celle-ci au fur et à mesure.
    Il suffit de calculer la somme maximale des deux chiffres adjacents et de relever ceux-ci, de plus, comme c'est fait par ailleurs dans AMAX et BMAX.
    Entre les quatre opérateurs usuels (+,-,*,/), c'est la division qui est de loin la plus coûteuse et il peut donc être utile d'en tenir compte quand on doit gérer des volumes conséquents.
    Un programme optimisé et au passage peut être un peut plus facile à lire, donnerait ceci :
    (je regrouperait de + en tête du PGM, derrière un drapeau, les indicateurs les plus utiles en cas de 'plantage'.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
           FILE SECTION.
           FD FICH-SAI.
           01 TABLE-SAI.
              05 SAI-CHIFR PIC 9 OCCURS 10 TIMES.
    
           WORKING-STORAGE SECTION.
            01.
              05          Pic x(8) value '$FICHSAI'.
          * Indice valeur de 1 à 10
              05 I PIC S9(4) Binary VALUE 0.
    
          * Numéro de ligne dans le fichier et numéro de ligne à relever
              05 N-LIGNE  PIC S9(9) comp-3 VALUE 0.
              05 NMAX     PIC 9.
          * Somme calculée et maximale trouvéer 
              05 SUMVAL   pic S9(4) Binary.
              05 SUMMAX  pic S9(4) Binary  value 0.
          * Les chiffres  AMAX (impair) et BMAX (pair) 
          * dont la somme représente la moyenne maximale
              05 AMAX     PIC 9.
              05 BMAX     PIC 9.
          *  indicateur de fin de traitement
              05 INDIC-FIN pic X value space.
              88 FIN-SAI         value high-value.
         * La moyenne XBAR = moyenne des 2 chiffres consécutifs   
              05 XBAR     PIC 99V,99.
    
    
           PROCEDURE DIVISION.
           BEGIN.
          * Ouverture en lecture uniquement du fichier
               OPEN INPUT FICH-SAI.
    
          * Lecture du 1er enregistrement
               READ FICH-SAI
                  AT END SET FIN-SAI TO TRUE
               END-READ
    
               PERFORM UNTIL FIN-SAI
          * Compteur de ligne
                 ADD 1 TO N-LIGNE
                 DISPLAY TABLE-SAI
          * Traitement de la moyenne maximale : 9 comparaisons à faire
                 PERFORM VARYING I FROM 1 BY 1 UNTIL I > 9
          * Recherche de la somme contigue maximale pour l'enregistrement lu
                       ADD SAI-CHIFR(I) to SAI-CHIFR(I + 1) Giving SUMVAL
                       If SUMMAX < SUMVAL then
                          MOVE SUMVAL to SUMMAX
          *               Garde la position de la ligne et les chiffres
                          MOVE N-LIGNE          TO NMAX
                          MOVE SAI-CHIFR(I)     TO AMAX
                          MOVE SAI-CHIFR(I + 1) TO BMAX
                       End-If
    
                   END-PERFORM
          *        Lecture de l'enregistrement suivant
                   READ FICH-SAI
                      AT END SET FIN-SAI TO TRUE
                   END-READ
               END-PERFORM
    
          * Affichage des résulats
               CLOSE FICH-SAI.
               Compute XBAR = (AMAX + BMAX) / 2
               DISPLAY ' '
               DISPLAY 'Le ' NMAX 'eme enregistrement : ' WITH NO ADVANCING
               DISPLAY 'les chiffres ' AMAX ' et ' BMAX
               DISPLAY 'donnent une moyenne de ' XBAR
               STOP RUN.
    Enfin, bien que ceci soit sans objet dans l'exemple qui ne cherche pas la > moyenne, il est utile de noter que si le compilateur le permet, le terme ALL est très pratique pour obtenir les MIN, MAX ou moyennes arithmétiques (MEAN) ,entre autres des occurs d'un tableau.
    exemple : COMPUTE MOYENNE = function MEAN(SAI-CHIFR(ALL))

  8. #8
    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
    Citation Envoyé par beegees Voir le message
    ...
    réussir mon examen de COBOL en Janvier (89%)..
    Tu vois, c'est ça ma récompense. Pour le reste ne te dérange surtout pas et ne te sens pas obligé. En plus tu vas te ruiner à remercier tout le monde qui le mérite aussi bien.

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

Discussions similaires

  1. [XSLT][XPath] Questions diverses
    Par progamer54 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 10/05/2006, 12h19
  2. Question de structure
    Par vdumont dans le forum C++
    Réponses: 2
    Dernier message: 01/05/2006, 19h08
  3. [DW8] Questions diverses sur le logicie
    Par syn_42 dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 01/03/2006, 17h23
  4. Petites questions diverses
    Par Fouflarage dans le forum Débuter
    Réponses: 7
    Dernier message: 29/11/2005, 13h43
  5. Questions diverses sur TIBDataset et TDBGrid
    Par AlexB59 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/11/2005, 17h14

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