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 de débutant en Cobol


Sujet :

Cobol

  1. #1
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut Questions de débutant en Cobol
    Bonjour,

    je m'autoforme sur cobol pour changer de métier. (j'espre que j'y arriverais).
    J'ai donc quelque question :
    HIGH-VALUE, LOW-VALUE : comment cela fonctionne ? Avez-vous un exemple de code et un résultat ?

    ALL : comment l'utilise-t-on ?

    COMP : idem à DISPLAY mais en numérique, c'est à dire un caractère un chifffre ?

    SEPARATE CHARACTER dans PICTURE c'est quoi ?

    Dans working-storage, comment utilise-t-on le 88 et dans le code (procedure division) ?

    Dans file section, à quoi correspond LABEL ?

    J'ai chercher avant sur internet, mais soit je n'ai rien trouvé, soit je n'ai pas comrpis.

    Merci par avance.

  2. #2
    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
    HIGH-VALUE correspond à la plus grande valeur stockable dans une zone alpha, soit en hexa X'FF' autant de fois qu'il y a d'octets.

    LOW-VALUE, c'est la plus petite valeur, donc du zéro binaire X'0000....'.

    ALL permet de ne pas écrire '***********************' si on veut exprimer qu'une zone de n caractères contient n fois le même caractère. On écrira par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MOVE ALL '*'         TO WS-ZONE-ALPHA-17
    ...
    
    IF WS-ZONE-ALPHA-17 = ALL '*'
    ...
    L'avantage, c'est que le code ne change pas avec la taille de la zone.

    COMP permet de stocker des nombre en format binaire. Voir sur ce thème un récent sujet dans ce forum.

    SEPARATE : permet d'imposer que le signe, au lieu d'être en standard associé au caractère de gauche du nombre, soit codé dans un caractère (octet) à part.

    Niveau 88 :voici un exemple.

    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
    EN WORKING :
    
    01 FILLER                   PIC X(01).
       88 PAS-DE-RUPTURE        VALUE 'P'.
       88 FIN-FICHIER           VALUE 'F'.
       88 RUPTURE-NIVEAU-1      VALUE '1', 'F'.
       88 RUPTURE-NIVEAU-2      VALUE '2', '1', 'F'.
       88 RUPTURE-NIVEAU-3      VALUE '3', '2', '1', 'F'.
    
    En PROCEDURE :
    *-- La zone est alimentée à 'P', la condition "PAS-DE-RUPTURE" devient vraie :
       SET PAS-DE-RUPTURE TO TRUE.
    
    *-- La zone est alimentée à '3', la condition RUPTURE-NIVEAU-3 devient vraie.
       SET RUPTURE-NIVEAU-3 TO TRUE.
    
    *-- La zone est alimentée à '1', les conditions RUPTURE-NIVEAU-1, 2 et 3 deviennent vraies.
       SET RUPTURE-NIVEAU-1 TO TRUE.
    Explication :

    SET alimente la zone à la première des valeurs associées par la clause VALUE.
    Une condition est vraie si la zone contient une des valeurs associées par la clause VALUE.

    Dans mon exemple, RUPTURE-NIVEAU-N ==> RUPTURE-NIVEAU-M si N < M.

    LABEL : c'est obsolète, laisse tomber.

  3. #3
    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
    1) HIGH-VALUE, LOW-VALUE : High-value : X'FF' valeur maxi d'une zone en Pic X ou Pic A. Souvent utilisé dans une fusion de fichiers pour forcer le critère de comparaison pour le fichier arrivé en fin de lecture.
    Low-value : X'00' = initialisation à NULL, tj pour du Pic X ou A.

    2) ALL : Répétition, exemple Move ALL '-' to LIGNE-TITRE2

    3) COMP : Pic S9(n) COMP = numérique signé binaire sur 2 (S9 à S9(4), 4 (S9(5) à S9(9) ou 8 octets au delà, jusqu'à S9(18). Signe alors obligatoire.

    4) SEPARATE CHARACTER dans PICTURE : pour extérioriser, avant avec LEADING, le signe d'une zone numérique éditée, particulièrement pour des codes retours, SQL par exemple. 05 WS-SQLCODE Pic S9(4) SIGN IS LEADING SEPARATE.

    5) niveau 88 : c'est une délaration de synonyme à une valeur ou groupe de valeurs pour un meilleure lisibilité du programme
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         05 CODE-FAMILLE PIC  X.
         88  MARIE           VALUE '1'.
         88  CELIBATAIRE  VALUE '2'.
    Permet de tester par IF MARIE plutôt que IF CODE-FAMILLE = '1'

    6) LABEL file section : Label fichiers disques ou K7, en COBOL II, le plus simple est de ne pas préciser cette clause, sauf à vouloir prendre en compte des labels non standard.
    nb. En MVS le label d'une cartouche est en tête (enreg. HDR1 et HDR2), le label d'un fichier disque est dans la VTOC (enreg. DSCB). Il y a vérification de ce qu'il y a dans le LABEL, le JCL et les déclarations programmes pour s'assurer à l'OPEN que l'on prend bien le bon fichier.

    nb. Spécifiquement pour Enterprise COBOL (IBM z/OS) la doc IBM est accessible via le lien suivant :
    http://www-306.ibm.com/software/awdt...l/zos/library/

  4. #4
    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
    ouf ! mes excuses Fremen167, on s'est encore croisé. On peut modifier un post mais si ça reproduit, il y a truc pour le supprimer sur ce forum ?

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Homer-ac Voir le message
    1) HIGH-VALUE, LOW-VALUE : High-value : X'FF' valeur maxi d'une zone en Pic X ou Pic A ...
    Low-value : X'00' = initialisation à NULL, tj pour du Pic X ou A.
    Attention, il y a un piège !
    HIGH-VALUE, au sens strict, c'est le caractère de position la plus haute dans un jeu de caractère donné (LOW-VALUE étant la plus basse).

    L'exemple cité ici est en EBCDIC (qu'on rencontre en z/OS).

    En ASCII standard (qui est un code à 7 bits et pas à 8) la valeur sera différente.
    Position la plus élevé : 127 (on part de 1)
    Représentation décimale : 126 (on part de 0)
    Représentation hexadécimale : 7E

    J'ai travaillé autrefois en COBOL sous GCOS8 et en ASCII, et j'ai été confronté à ce problème ...


    "HIGH-VALUE/HIGH-VALUES
    Represents one or more occurrences of the character that has the highest ordinal position in the collating sequence used. For the EBCDIC collating sequence, the character is X'FF'; for other collating sequences, the actual character used depends on the collating sequence indicated by the locale"

  6. #6
    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
    Citation Envoyé par Homer-ac Voir le message
    ouf ! mes excuses Fremen167, on s'est encore croisé. On peut modifier un post mais si ça reproduit, il y a truc pour le supprimer sur ce forum ?
    Pas de problème

    Tu peux le supprimer de la même façon que pour le modifier (il suffit de cliquer ensuite sur le bouton "supprimer ce message" en ayant sélectionné la "sélection logique du message").

  7. #7
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Super merci de vos réponse, j'ai tout compris.

    Allez, on continue :

    différence entre 77, 78 et 01 à 49 dans WORKING-STORAGE ?

    FD : BLOCK CONTAINS : indique que le fichier à des enregistrements bloqué c'est à dire ?

    WRITE : ADVANCING insère un saut de ligne où, suivant si on est arrivé au saut de ligne ?

    STRING WITH POINTER ???

    FILLER est-il un mot réservé et que signifie-t-il ?

    DISPLAY "Prix : " NO ADVANCING -> que signifie no advancing.

    différence entre MOVE et SET

    PS : je précise que mon livre de cobol date de 83 et on n'y parle que du cobol 74.

  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 bubulemaster Voir le message
    ...
    différence entre 77 et 01 à 49 dans WORKING-STORAGE ?
    77 (niveau) pour la déclaration des zones élémentaines (non décomposées) sans perte d'espace mémoire pour l'alignement (sur simples mots = 4c)
    01 à 49 niveaux pour les zones élémentaires ou décomposées (structures). Le niveau 01 aligne les zones sur des adresses de déplacement multiples de 4 octets.
    C'est valable pour toutes les données déclararées dans la DATA DIVISION.
    Certains compilateurs exiqgent que les niveaux 77 soit au debut de la section, d'autres non.
    Pour rappel :
    - niveau 88 : Déclaration d'un nom de condition associée à la valeur d'une variable.
    - niveau 66 pour regrouper et renommer des zones élémentaires successives
    Exemple :
    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
    0036   77  WQUOT      PIC 9(7) COMP-3.
    0037   77  WNBJ       PIC 9(7) COMP-3.
    0038   77  WNBA       PIC 9(5) COMP-3.
    0039   77  WNBJ9      PIC 9(7).
    0040   77  WNBJX      PIC X(7).
    0041   77  WREST-AA   PIC 9.
    0048   01  WCUMMOIS1  PIC X(36) VALUE
    0049                         "031059090120151181212243273304334365".
    0050   01  WCUMMOIS2 REDEFINES WCUMMOIS1.
    0051       03 WCUMMOIS  PIC 999 OCCURS 12.
    0052   01  WFINMOIS1  PIC X(24) VALUE "312831303130313130313031".
    0053   01  WFINMOIS2 REDEFINES WFINMOIS1.
    0054       03 WFINMOIS  PIC 99 OCCURS 12.
    0081   01  DATCTL-PARAMS.
    0082       03 LDATE.
    0083          05 JJ    PIC XX.
    0084          05 MM    PIC XX.
    0085          05 CC    PIC XX.
    0086          05 AA    PIC XX.
    0087       03 LERR     PIC X.
    0088       03 LLIBJJ   PIC X(8).
    0089       03 LLIBMM   PIC X(9).
    0090       03 LNBJ     PIC X(7).
    0416   01  LDET.
    0417       03 FILLER     PIC X(02) VALUE "* ".
    .../...
    0433       03 FILLER     PIC X(01) VALUE SPACES.
    0434       03 TYPEPJUST  PIC X(02).
    0435       03 FILPJUST1  PIC X(01) VALUE SPACES.
    0436       03 NUMPJUST   PIC X(12).
    0437       03 FILPJUST2  PIC X(01) VALUE SPACES.
    0438       03 DATEPJUST  PIC X(08).
    .../...
    0448       66 LIBTOT RENAMES TYPEPJUST OF LDET
    0449                    THRU DATEPJUST OF LDET.
    FD : BLOCK CONTAINS : indique que le fichier à des enregistrements bloqué c'est à dire ?
    Pour définir un facteur de blocage. On l'utilise de moins en moins et on préfère laisser l'OS se démerder; sauf pour gérer des fichiers existants avec un facteur de blocage précis.
    Un bloc c'est l'enregistrement physique réel que la machine échange entre le disque, par exemple, et la mémoire système allouée au programme.
    On indique la taille du bloc en nombre d'enregistrements ou en octets. Dans ce cas c'est un multiple entier de la taille d'enregistrement. Pour être performant en terme de temps de réponse et d'occupation mémoire, il y a des formules bien précises pour optimiser la taille des blocs.
    Actuellement, on s'en occupe plus.

    WRITE : ADVANCING insère un saut de ligne où, suivant si on est arrivé au saut de ligne ?
    Imprime ou affiche la ligne après ou avant d'avancer de 0 à n lignes ou en allant vers une N° de ligne précis (canal).

    STRING WITH POINTER ???
    Concatène des zones en modifiant le pointeur ??? (l'adresse, N°) du dernier caractère concaténé.

    FILLER est-il un mot réservé et que signifie-t-il ?
    FILLER est un mot réservé pour dire j'ai une zone de tels longueur et type mais je ne vais l'utiliser dans mon programme.

    DISPLAY "Prix : " NO ADVANCING -> que signifie no advancing.
    C'est comme ADVANCING 0 = sans avancer : on fait du sur place, on affiche ou on écrit sur la même ligne.

    PS : je précise que mon livre de cobol date de 83 et on n'y parle que du cobol 74.
    AMHA, c'est largement suffisant pour débuter.

  9. #9
    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 058
    Points
    32 058
    Par défaut
    Juste une question sur cette version y -avait-il déjà les scope-terminators(END-IF, END-EVALUATE.....)???

    parceque ça rend quand même le code bien plus lisible que des points partout.......
    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.

  10. #10
    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
    Non malheureusement.
    COBOL norme ANSI 74 = COBOL 1
    C'est COBOL II (norme ANSI 85) qui introduit le structuré et donc les scope terminators (END-...) et toutes les instructions de structuration (EVALUATE et CONTINUE en altenative au NEXT SENTENCE, perform in line avec with test before/after etc...)
    Puis un complément ISO 89 a introduit l'utilisation de quelques fonctions, on parle parfois alors de COBOL 3.

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

Discussions similaires

  1. question de débutant:cics/cobol/db2
    Par holderheck dans le forum DB2
    Réponses: 11
    Dernier message: 02/02/2008, 14h00
  2. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  3. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 17h25
  4. Questions de débutant
    Par J-P-B dans le forum XMLRAD
    Réponses: 12
    Dernier message: 24/07/2003, 15h19
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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