IVES MARIE CHRIST

IVES MARIE CHRIST

program cobol

LES JOIES DE L'AS/400!!

Initiation à la Programmation en COBOL sur AS/400

 


Le langage COBOL fut conçu en 1957 sur demande du gouvernement des U.S.A. L'étude fut développée par un comité d'utilisateurs et de constructeurs d'ordinateurs. COBOL = Common Organization Business Oriented Language.


Chapitre I: Premiers pas en COBOL

Chapitre II:
Les différentes déclarations

Chapitre III:
Les opérations arithmétiques simples

Chapitre IV:
Utilisation des grilles d'écran

Chapitre V:
Utilisation des fichiers séquentiels

Chapitre VI:
Utilisation des fichiers indéxés

Chapitre VII:
D'autres programmes séquentiels

Chapitre VIII:
D'autres programmes indéxés

Résumé

Conclusion

Index

 

sommaire ch2

Chapitre I: Premiers pas en COBOL




Premier programme très simple


IDENTIFICATION DIVISION.
PROGRAM-ID.EXO1.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 Z1 PIC X(10).
77 Z2 PIC X(10).
PROCEDURE DIVISION.
DEBUT.
        DISPLAY "Entrez une valeur pour zone".
        MOVE SPACES TO Z1.
        ACCEPT Z1.
        MOVE Z1 TO Z2.
        DISPLAY Z2.
        STOP RUN.


Ce programme s'appelle EXO1. Son principe est de définir deux variables Z1 et Z2, de saisir une valeur dans Z1 puis de la mettre dans Z2. Pour finir on affiche Z2.


IDENTIFICATION DIVISION

Ce premier paragraphe permet d'identifier le programme pour l'utilisateur en indiquantle nom du programme, le nom de l'auteur, la date de création etc...
Tout cela s'écrit en colonne 8.

Retour au programme.


PROGRAM-ID

Ce terme sert à nommer le programme, il est suivi de son nom.

Retour au programme.


ENVIRONMENT DIVISION

Ce deuxième paragraphe contient une description sommaire de la configuration du calculateur utilisé ainsi que des informations relatives à la gestion des entrées-sorties, aux conditions spéciales de traitement des fichiers.

Retour au programme.


DATA DIVISION

Ce troisième paragraphe est divisé en plusieurs sections. Il permet de définir toutes les données utiles au programme:

  • -Fichiers manipulés par le programme
    -Données internes comme les variables, les vecteurs etc...

Les trois sections les plus utilisées sont:


Retour au programme.


WORKING-STORAGE SECTION

Cette section permet de déclarer les variables internes au programme.

Retour au programme.


77 Z1 PIC X(10)

  • 77 permet de déclarer une variable.
    Z1 correspond à son nom.
    PIC permet de donner son type d'image.
    X représente le type d'image alphanumérique.
    (10) correspond à la taille de la variable.

(Cf: Chapitre II "Les différentes déclarations")

Retour au programme.


PROCEDURE DIVISION

Le programmeur y décrit le traitement à effectuer par le calculateur. C'est donc le lieu de la traduction de l'algorithme conçu par le programmeur. Le programme ainsi défini s'écrit en colonne 12.

Retour au programme.


DEBUT

Il s'agit d'une étiquette. On en utilisera de manière à faire des boucles ou pour donner les noms des fonctions et procédures de notre programme.

Retour au programme.


DISPLAY

Commande qui permet d'afficher à l'écran.

Retour au programme.


MOVE

Cette commande permet de faire une affectation.
Exemple:

  • MOVE SPACES TO Z1.
    Cela met des espaces dans la variable Z1.

    MOVE Z1 TO Z2.
    Cela met le contenu de la variable Z1 dans la variable Z2.



Retour au programme.


ACCEPT

Cette commande permet de saisir queque chose au clavier et de le mettre dans une variable.

Retour au programme.


STOP RUN

Cette commande marque la fin du programme.

Retour au programme.

Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch1 ch3

Chapitre II: Les différentes déclarations





1) Déclaration de variables

2) Déclaration de structures

3) Déclaration de fichiers

4) Déclaration de grilles d'écran

5) Déclaration d'impression

6) Déclaration des touches de fonctions

7) Déclaration des pictures d'éditions



1) Déclaration de variables

Pour déclarer tout type de donnée, on doit d'abord préciser le niveau auquel elle se situe.Le numéro 77 sert donc à déclarer une variable. Ce chiffre est suivi du nom de la variable puis du mot PICTURE (ou PIC). Ensuite on précise le type de variable:

  • Numérique=> 9
    Alphanumérique=> X.


exemples:
* 77 var PIC X.
Déclaration d'une donnée appelée "var" de type alphanumérique et de taille 1.

* 77 var PIC XXXXX. ou 77 var PIC X(5).
Cette déclaration est la même que ci-dessus avec une donnée de taille 5.

* 77 var PIC X(5) VALUE "Nom: ".
Déclaration d'une donnée appelée "var" de type alphanumérique et de taille 5.
On a initialisé cette donnée à "Nom: ".

* 77 var PIC X(2) VALUE SPACES.
Déclaration d'une donnée appelée "var" de type alphanumérique et de taille 2.
On a initialisé cette donnée avec des espaces.
Le mot SPACES est prédéfini en Cobol.

* 77 entier PIC 9.
Déclaration d'une donnée appelée "entier" de type numérique et de taille 1.

* 77 entier PIC 99999. ou 77 entier PIC 9(5).
Cette déclaration est la même que ci-dessus avec une donnée de taille 5.

* 77 decimal PIC 9999V99. ou 77 decimal PIC 9(4)V9(2).
Ceci permet de déclarer un nombre à virgule. On aura donc 4 chiffres avant la virgule et 2 après.

* 77 signé PIC S99 VALUE 5.
Déclaration d'une donnée appelée "signé" de type numérique. Le "S" permet d'affecter un signe (positif ou négatif). La taille de cette donnée est de 2 et sa valeur est 5.On peut aussi l'initialiser à zero en écrivant:

  • VALUE 0.
    ou VALUE ZERO.

ATTENTION
Le nom "ZERO" peut être utilisé car il est prédéfini en Cobol.
Il est impossible de faire une affectation du genre: VALUE ONE.


2) Déclaration de structures

Ce type de déclarations permet notamment de faires des vecteurs à une ou plusieurs dimensions.

Vecteur à une dimension

01 vecteur.
        02 vecteur2 occurs 10 pic 99.

Ceci est une structure s'appelant vecteur et contenant un tableau à une dimension s'appellant vecteur2 et composé de dix éléments.
Pour affecter des valeurs dans ce tableau on précise l'endroit dans le vecteur:

  • ->MOVE 50 to vecteur2(1). Ceci affecte la valeur 50 au premier élément du vecteur. En cobol le vecteur de dix éléments à un indice qui va de 1 à 10 à la différence du C++ dont l'indice va de 0 à 9.




Vecteur à plusieurs dimensions

01 vect.
        02 vect2 occurs 10.
                03 vect3 occurs 20 pic 999.

Ceci est une structure s'appelant vect composé d'un vecteur à deux dimensions.

  • -> MOVE 249 to (1,5).

On a donc placé la valeur 249 à la ligne 1 et à la colonne 5.


Autre type de structure

01 cart-id.
        02 num-insee pic 9(13).
        02 nom pic x(32).
        02 adresse.
                03 cp pic x(5).
                03 rue pic x(64).
                03 ville pic x(32).

Ceci est une structure permettant de donner l'identité d'une personne avec pour la carte d'identité un numéro INSEE, un nom et une adresse elle-même composé d'un code postal, d'une ville et d'une rue.


3) Déclaration de fichiers

Pour déclarer un fichier il y a plusieurs étapes:

  • -Dans la zone ENVIRONMENT DIVISION, on déclare la manière dont on accède aux fichiers. C'est à dire en entrée, en sortie ou les deux.
    -On definit le contrôle des fichiers.
    -On donne les différents fichiers et leur mode d'oganization (séquentiel ou indéxé).
    -Dans la zone DATA DIVISION, on déclare une section fichier.
    -On déclare les différents fichiers.
    -Dans la zone PROCEDURE DIVISION, on ouvre les différents fichiers en lecture, écriture ou les deux.
    -A la fin du programme ou de l'utilisation de ces fichiers, on les fermes.


Exemple:

  • ...
    ENVIRONMENT DIVISION.
    INPUT-OUTPUT SECTION.
    FILE-CONTROL.
    SELECT FPERSONNE ASSIGN TO DATABASE-PERSONNEL
    ORGANIZATION SEQUENTIAL.
    ...
    DATA DIVISION.
    FILE SECTION.
    FD FPERSONNE LABEL RECORD STANDARD.
    01 EPERSONNE.
    COPY DDS-ALL-FORMATS OF PERSONNEL.
    ...
    PROCEDURE DIVISION.
    OPEN I-O FPERSONNE.
    ...
    CLOSE FPERSONNE.



Supposons qu'une entreprise possède plusieurs employés sauvegardé dans un fichier PERSONNEL. Dans le programme cobol la fonction SELECT renomme le fichier PERSONNEL en FPERSONNE. Celui-ci est organisé séquentiellement. Le nom PERSONNEL est donc le nom externe du fichier, tandis que FPERSONNE est le nom interne au programme.

FILE-SECTION est une zone à l'intérieur de laquelle on définit les fichiers. 01 EPERSONNE... correspond à la copie de tous les formats se trouvant dans le fichier. Cette notation de FPERSONNE et EPERSONNE sera développé dans le chapitre V:Utilisation des fichiers séquentiels.


4) Déclaration de grilles d'écran

Cette déclaration s'effectue de la même manière que pour un fichier. Il y a donc plusieurs étapes similaires.

Exemple:

  • ...
    ENVIRONMENT DIVISION.
    INPUT-OUTPUT SECTION.
    FILE-CONTROL.
    SELECT FGRILLE nom-grille du programme ASSIGN TO WORKSTATION-nom-membre des grilles.
    ...
    FILE SECTION.
    FD FGRILLE LABEL RECORD OMITTED.
    01 EGRILLE.
    COPY DDS-AL-FORMATS OF nom du membre où se trouve les grilles.
    ...
    PROCEDURE DIVISION.
    OPEN I-O FGRILLE.
    ...
    CLOSE FGRILLE.

    Cf chapitre IV:Utilisation des grilles d'écran.


    5) Déclaration d'impression

    Exemple:

    • ...
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT FIMPR ASSIGN TO PRINTER-QSYSPRT
      ORGANIZATION SEQUENTIAL.
      ...
      FILE SECTION.
      FD FIMPR LABEL RECORD OMITTED.
      01 EIMPR PIC X(80).
      ...
      PROCEDURE DIVISION.
      OPEN OUTPUT FIMPR.
      ...
      CLOSE FIMPR.


    Un fichier d'impression est forcément organisé en séquentiel pour la simple et bonne raison qu'une imprimante commence en haut de la feuille et fini en bas (c'est logique).

    EIMPR contient quand à lui le nombre maximum de caractère se trouvant sur une ligne à imprimer.

    Cf chapitre VII: D'autres programmes séquentiels.


    6) Déclaration des touches de fonctions


    Cette déclaration ce fait dans la WORKING-STORAGE SECTION. On donne d'abord la déclaration des touches de fonctions, puis on les déclare comme pour des entiers avec le préfixe 88 au lieu de 77.(Cf chapitre IV:Utilisation des grilles d'écran.)

    Exemple:

    • ...
      WORKING-STORAGE SECTION.
      01 FTOUCHES PIC XX.
      88 F3 VALUE "03".


    7) Déclaration des pictures d'éditions


    La chaîne de caractères d'une telle donée est limitée à certaines combinaisons des 14 symboles suivants:

    • B / V Z 0 9 , . + - * CR DB $
      Une picture d'édition permet d'éviter de trainer des zéro inutiles dans les calculs juste avant d'imprimer.

      Le symbole 9 correspond aux caractères numériques.
      Le symbole Z retire les zéro inutiles.
      Le symbole $ retire les zéro non significatifs sauf le dernier zéro remplacer par $.
      Le symbole - retire les zéro non significatifs sauf le dernier zéro remplacer par -.
      Le symbole + retire les zéro non significatifs sauf le dernier zéro remplacer par +.
      Le symbole * remplace les zéro non significatifs par *.
      Le symbole B permet l'insertion d'un blanc ou espace.
      Le symbole 0 permet l'insertion d'un zéro.
      Le symbole / permet l'insertion d'un slash.
      Le symbole V correspond à la virgule dans la zone émettrice.
      Le symbole . correspond à la virgule dans la zone réceptrice.
      Le symbole , représente la position où une virgule sera insérée.


    EXEMPLES:
    Etant donné la picture de l'élément émetteur et son contenu, et la picture de l'élément récepteur, voici le contenu de l'élément récepteur après affectation:
    (b= 1 blanc ou 1 espace)

    Picture de la zone émettrice Contenu de cette zone Picture de la zone réceptrice à l'impression
    99999 12345 ZZZ99 12345
    99999 00001 ZZZ99 bbb01
    99999 00123 $$999 b$123
    99999 00123 $9999 $0123
    S9999 -0123 -9999 b-0123
    S9999 +0012 +9999 b+0012
    S99999 -00123 ++++99 bb-123
    S99999 +00001 +++999 bb+001
    S99999 +01234 ---999 bb1234
    99999 00000 ----- bbbbb
    99999 12345 **999 12345
    99999 00001 **999 **001
    999999 123456 $ZZZ,ZZZ.99 $123,456.00
    9(4)V99 123456 $ZZZ,ZZZ.99 $bb1,234.56
    S9(6) -000123 -(6)9 bb1bbb234
    9(6) 000012 Z(6)00 bbbb1200
    9(4)V99 000123 $$$$,$$$.99 bbbb,b$1.23
    9(6) 123456 99B99B99 12b34b56
    9(4)V99 00078 $$,$$9.99 bb,b$0.78


    Dans un programme:

    • ...
      WORKING-STORAGE SECTION.
      02 Z1 PIC 9(5).
      02 Z2 PIC ZZZ99.
      ...
      PROCEDURE DIVISION.
      ...
      MOVE Z1 TO Z2.
      WRITE (IMPRIMANTE).
      ...


Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch2 ch4

Chapitre III: Les opérations arithmétiques





Pour les opérations, on utilise en COBOL les quatres verbes suivants:






L'addition

EXEMPLES:

  • -Cas où la variable résultante intervient dans le calcul:
    • I=I+1 -> ADD 1 TO I
      J=J+K+L -> ADD K L TO J

    -Cas où la variable résultante n'intervient pas dans le calcul:

    • K=L+1 -> ADD 1 L GIVING K
      N=O+P+Q -> ADD O P Q GIVING N



La soustraction

EXEMPLES:

  • -Cas où la variable résultante intervient dans le calcul:
    • I=I-1 -> SUBSTRACT 1 FROM I
      J=J-K-L -> SUBSTRACT K L FROM J


    -Cas où la variable résultante n'intervient pas dans le calcul:

    • K=L-1 -> SUBSTRACT 1 FROM L GIVING K
      N=O-P-Q -> SUBSTRACT P Q FROM O GIVING N

     




La multiplication

EXEMPLES:

  • -Cas où la variable résultante intervient dans le calcul:
    • I=I*2 -> MULTIPLY 2 BY I

    -Cas où la variable résultante n'intervient pas dans le calcul:

    • N=O*P -> MULTIPLY O BY P GIVING N

     




La division

EXEMPLES:

  • -Cas où la variable résultante intervient dans le calcul:
    • B=B/A -> DIVIDE A INTO B
      ou DIVIDE B BY A GIVING B

    -Cas où la variable résultante n'intervient pas dans le calcul:

    • C=B/A -> DIVIDE A INTO B GIVING C
      OU DIVIDE B BY A GIVING C




Le verbe COMPUTE

EXEMPLES:

  • -Cas où la variable résultante intervient dans le calcul:
    • C=C*B+A*D -> COMPUTE C=(C*B)+(A*D)

    -Cas où la variable résultante n'intervient pas dans le calcul:

    • A=B+C*D-E -> COMPUTE A=B+(C*D)-E


Le verbe compute s'utilise surtout pour les calculs complexes qui nécessiteraient plusieurs ligne et même parfois des variables temporaires.

Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch3 ch5

Chapitre IV: Utilisation des grilles d'écran




Dans ce chapitre, nous allons vous expliquez comment créer et se servir d'une grille d'écran sur un AS/400 et dans un programme COBOL. Le programme exemple sera de compter le nombre de billets composant une somme saisie par l'utilisateur. Par exemple pour 1623 francs, le programme donnera:

  • 3 billets de 500
    1 billet de 100
    1 piece de 20
    1 piece de 2
    1 piece de 1.



1) Création d'une grille d'écran

2) Utilisation dans un programme exemple

Programme exemple sur les grilles d'écran


IDENTIFICATION DIVISION.
PROGRAMM-ID.DECOMPTE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GDECOMPTE
        ORGANIZATION TRANSACTION
        CONTROL-AREA FTOUCHES.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-ALL-FORMATS OF GDECOMPTE.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
01 BILLETPIECE.
        02 BP OCCURS 9 PIC S9(4).
01 RESULTAT.
        02 RESULT OCCURS 9.
                03 RESUL PIC ZZZ9.
01 MONTANT.
        02 SOMME PIC S9(4).
01 I PIC 99.
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE.
        MOVE 500 TO BP(1).
        MOVE 200 TO BP(2).
        MOVE 100 TO BP(3).
        MOVE 50 TO BP(4).
        MOVE 20 TO BP(5).
        MOVE 10 TO BP(6).
        MOVE 5 TO BP(7).
        MOVE 2 TO BP(8).
        MOVE 1 TO BP(9).
DEB.
        MOVE 1 TO I.
        INITIALIZE DECOM COMPTE.
        WRITE EGRILLE FORMAT "DECOM".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE CORR DECOM TO MONTANT.
TQ.
        IF I <10
                DIVIDE SOMME OF MONTANT BY BP(I) GIVING RESUL(I)
                REMAINDER SOMME OF MONTANT
                ADD 1 TO I
                GO TO TQ
        END-IF.
        MOVE RESULTAT TO BILLET.
        WRITE EGRILLE FORMAT "COMPTE".
        READ FGRILLE.
        IF F3 GO TO FIN.
        GO TO DEB.
FIN.
        CLOSE FGRILLE.
        STOP RUN.


1) Création d'une grille d'écran


La commande STRSDA permet d'accéder à un menu dans lequelle il faut indiquer le nom du membre que l'on veut créer. Ce membre contiendra les différents formats de grilles, c'est à dire les différentes grilles. Aprés avoir créé un format, on se retrouve avec un écran dans lequelle on peut positionner son curseur afin de définir les différentes zones de texte, de saisie ou d'affichage.

Pour les zones textes, on utilise +I pour les entrées, +O pour les sorties et +B pour les entrées/sorties. Pour les zones numériques, on utilise +3 pour les entrées, +6 pour les sorties et +9 pour les entrées/sorties.

Si on écrit +B(20), on définit une zone de 20 caractères en INPUT-OUTPUT. De même, si on écrit +9(20), on définit une zone de 20 chiffres en INPUT-OUTPUT. Pour définir les décimaux, on écrit +9(8,2). Cela définit une zone en I-O de 8 chiffres: 6 avant la virgule et 2 après.
On écrit donc entre parenthèse le nombre total de chiffres suivit du nombre de décimale.

Ici, dans notre exemple, la grille DECOM contient une zone en +6(4) qui s'appelle SOMME et la grille COMPTE contient une zone en +6(36) qui s'appelle BILLET. Elle sert à recevoir le vecteur resultat qui a au total 36 caractères.

Retour au programme.

2) Utilisation dans un programme exemple

 

INPUT-OUTPUT SECTION.


Ceci permet de préparer des zones d'entrées-sorties entre tous les composants de l'AS/400. Sans cela, il est impossible d'accéder aux grilles d'écran, aux fichiers etc...

Retour au programme.

FILE-CONTROL.


Ceci definit le controle des fichiers. Pour l'AS/400, une grille d'écran est un fichier au même titre qu'un fichier physique sur le disque dur. En effet, on peut imaginer que la grille se trouvant sur le disque dur doit bien être ouverte puis refermée comme un autre fichier.

Retour au programme.

SELECT FGRILLE ASSIGN TO WORKSTATION-GDECOMPTE


Pour le programme, on doit définir un nom pour le ou les grilles du membre GDECOMPTE. On retrouve d'ailleurs ce phénomène en C++ avec notamment FSTREAM FICHE où le fichier est utilisé sous le nom de FICHE dans le programme.
La différence avec le C++, c'est qu'en COBOL, on doit utiliser deux noms. Dans ce programme ceux sont FGRILLE et EGRILLE.
Le nom WORKSTATION signifie que les grilles d'écran contenues dans GDECOMPTE sont rattachées à la station de travail. On constatera que les fichiers physiques sont déclarés autrement. cf chapitre V:Utilisation des fichiers séquentiels.

Retour au programme.

ORGANIZATION TRANSACTION


Cela permet de dire au compilateur que des échanges vont s'effectuer au sein des grilles et du programme (sinon cela ne servirait à rien).

Retour au programme.

CONTROL-AREA FTOUCHES.


Ceci est très important car on l'utilise très souvant. Ce sont les touches de fonctions (F1, F2, ... F24).

Retour au programme.

FILE SECTION.


Les grilles étant des fichiers, il faut bien un endroit pour les déclarer.

Retour au programme.

FD FGRILLE LABEL RECORD OMITTED.


Ceci est la déclaration d'un fichier. Le nom FGRILLE permet d'identifier que ce sont des grilles et rien d'autre.

Retour au programme.

01 EGRILLE.


Ceci est le deuxième nom que l'on utilise dans le programme pour les grilles. En schématisant, on peut dire que FGRILLE recueille les informations de la grille vers le programme, tandis que EGRILLE fait l'inverse. En fait, FGRILLE correspond à l'entrée et EGRILLE à la sortie.

Retour au programme.

COPY DDS-ALL-FORMATS OF GDECOMPTE.


Grâce à cela on précise que l'on copie tous les formats du membre GDECOMPTE. Bien entendu, si dans un membre vous avez 500 grilles, vous ne copierez que les formats dont vous avez besoin.

Retour au programme.

01 FTOUCHES PIC XX.


Voici la déclaration des touches de fonctions.

Retour au programme.

88 F3 VALUE "03".


F3 est le nom de la variable et 03 sa valeur. Ne définissez pas F4 avec la valeur 03. Ce serait idiot et on y comprendrait plus rien. Donc pour F1 c'est 01, pour F4 c'est 04 etc...

Retour au programme.

BILLETPIECE


Voici un exemple de vecteur. La structure s'appelle BILLETPIECE avec un vecteur BP de 9 composantes ayant chacune une taille de 4 caractères numériques signés.

Retour au programme.

OPEN I-O FGRILLE.



Comme tout les "fichiers", il faut les ouvrir dans le mode que l'on a choisi. Ici on décide de l'ouvrir en entrée et sortie (I-O), on aurait pu l'ouvrir en entrée (INPUT) ou sortie (OUTPUT) mais compte tenu du fait que l'on saisi des infos dans une grille et qu'on en affiche dans l'autre...

Retour au programme.

INITIALIZE DECOM COMPTE.


Devinez!! Ca initialise les grilles DECOM et COMPTE afin qu'en les affichant, nous n'obtenoins pas n'importe quoi à l'écran en plus de ce que l'on a écrit. Vous avez bien sûr compris que DECOM et COMPTE sont les deux grilles que contiennent le membre GDECOMPTE.

Retour au programme.

WRITE


Write EGRILLE format "DECOM" envoi la grille vers l'écran de l'AS/400, mais pour la voir s'afficher, il faut obligatoirement un READ après le WRITE.

Retour au programme.

READ


Cette commande permet d'attendre une réponse du clavier, cela fonctionne un peut comme ACCEPT. Pour afficher une grille, même si elle ne doit par récupérer d'information, il faut que le WRITE soit suivit du READ.

Retour au programme.

MOVE CORR


Voilà une belle particularitée de l'AS/400. En théorie, on ne doit pas donner le même nom pour une variable dans un programme et dans une grille. Ce serait comme une double déclaration. Cependant si cette variable propre au programme est définit dans une structure, on peut faire un MOVE CORR, c'est à dire un MOVE CORRESPONDING. De cette manière vous ne jonglez pas avec deux noms différents pour une même variable qu'elle soit propre à la grille (pour la saisie ou l'affichage) ou propre au programme (pour les calculs ou l'utilisation).

Retour au programme.

SOMME OF MONTANT


Pour le progamme, SOMME est le SOMME de la grille DECOM tandis que SOMME OF MONTANT est le SOMME du programme.

Retour au programme.

MOVE RESULTAT TO BILLET.


Ici on a l'exemple même de ce qui est illustré au dessus. RESULTAT est une structure du programme tandis que BILLET est un champs de la grille COMPTE. Pourtant on utilise BILLET comme si il avait était définit naturellement dans le programme. Celui-ci ne possédant qu'un seul BILLET il n'y a aucune confusion contrairement à SOMME. Voilà pourquoi SOMME est défini dans une strcture et que son nom est SOMME OF MONTANT.

Retour au programme.



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch4 ch6

Chapitre V: Utilisation des fichiers séquentiels




Bien maintenant que l'on sait se servir un peu mieux de cette fabuleuse machine qu'est l'AS/400, si on passé aux choses sérieuses; Abordons le problème des fichiers.


1) Création d'un fichier séquentiel

2) Utilisation dans un programme exemple SCREER

3) Que fait le programme exemple SCREER



Programme exemple sur les fichiers



IDENTIFICATION DIVISION.
PROGRAMM-ID.SCREER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
        ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-PERSONNE1 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE OUTPUT FPERSONNEL.
TQ.
        INITIALIZE PERSONNE1.
        WRITE EGRILLE FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        WRITE EPERSONNEL.
        GO TO TQ.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        STOP RUN.


1) Création d'un fichier séquentiel


Nous allons créer un fichier comportant des informations dans lequel il y aura en plus un nom d'enregistrement.
Pour notre exemple, le nom du fichier est PERSONNEL, le nom d'enregistrement est ENRPERS.
Pour définir des caractères, on écrit simplement le nom de la variable et sa taille.
Pour définir des numériques, on écrit le nom de la variable suivit d'un S et sa taille.
Les décimaux s'écrivent comme pour les grilles d'écran en mettant le nombre de chiffres total, suivi du S et du nombre de décimales.

Exemple:

  • R ENRPERS
        NOM               32
        PRENOM        32
        ADRESSE        96
        CP                      5
        VILLE               27
        TEL                   20
        SALAIRE            7S2


Retour au programme.



2) Utilisation dans un programme exemple SCREER



SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL


Dans le cas ci-dessus, nous avons à faire à un fichier que l'on a créé, sur lequel nous devons sauvegarder nos propres données au fur et à mesure des modifications, contrairement aux grilles d'écran, qui une fois définies, restent telles quels. Par conséquent, au lieu d'attacher les données à la station de travail, on les attache à la DATABASE. C'est à dire que cette fois, le fichier se trouve dans une zone de données. Pour le reste, cela fonctionne presque comme une grille d'écran, avec deux noms FPERSONNEL et EPERSONNEL.

Retour au programme.


ORGANIZATION SEQUENTIAL.


Un fichier de données peut s'organisé sous trois mode:

  • -séquentiel
    -indéxé
    -relatif.


Ici, on traite le cas du séquentiel. C'est à dire que la recherche des données se fait dans l'ordre du fichier. L'organisation indéxée se fera dans le chapitre VI: Utilisation des fichiers indéxés Cette ligne est facultative car en cobol l'organisation séquentiel est par défaut.

Retour au programme.


COPY DDS-PERSONNE1 OF GPERSONNE.


Comme je vous l'ai expliqué dans le chapitre sur l'utilisation des grilles d'écran, on peut definir une seule grille. C'est ce que l'on fait ici en ne recupérant que la grille PERSONNE1. De ce fait, si vous faites d'autres programmes utilisant d'autres grilles vous n'emcombrez pas les précédents programmes et de toute façon vous n'avez aucunes modifications à y apporter.

Retour au programme.


FD FPERSONNEL LABEL RECORD STANDARD.


Ici on défini le fichier de données. Le nom FPERSONNEL doit donc être clair comme FGRILLE pour les grilles d'écran. Le LABEL RECORD STANDARD sert quant à lui à donnér le type d'enregistrement éffectué.

Retour au programme.


OUTPUT FPERSONNEL.


Le programme exemple permet de créer des enregistrements, donc le fichier est ouvert en sortie.
On sort du programme pour mettre des informations dans le fichier. On peut l'ouvrir en entrée (INPUT) pour les programmes de visualisation ou d'impression sans modifications des données ou en entrée-sortie (I-O) pour les mises à jour. On a aussi le mode EXTEND qui permet de rajouter un enregistrement. Cela signifie que le programme SCREER ne sert qu'une seule fois pour la création du premier enregistrement. En entreprise, ce programme ne sera donc pas mis à la disposition du personnel car si par inadvertance on l'utilise dans le but d'ajouter un employé on efface tous les autres.
Cela sera expliqué dans le chapitre VII: D'autres programmes séquentiels.

Retour au programme.


MOVE CORR PERSONNE1 TO ENRPERS.


On constate ici que l'on utilise le MOVE CORRESPONDING de la même manière qu'avec les grilles d'écran. Cependant le MOVE se fait avec le nom d'enregistrement du fichier ce qui fait une troisième appellation du fichier: FPERSONNEL, EPERSONNEL et ENRPERS.

Retour au programme.


WRITE EPERSONNEL.


Le WRITE est obligatoire pour sauvegarder les données sur le disque dur comme les grilles d'écran pour afficher les données à l'écran.

Retour au programme.

3) Que fait le programme exemple SCREER


Le fichier PERSONNEL contient toutes les informations sur un employé d'une entreprise. Ce programme affiche une grille d'écran sur laquelle on effectue la saisie des informations et on les sauvegarde dans le fichier.



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch5 ch7

Chapitre VI: Utilisation des fichiers indéxés






1) Création d'un fichier indéxé

2) Utilisation dans un programme exemple ICREER

3) Que fait le programme exemple ICREER



Programme exemple sur les indexes



IDENTIFICATION DIVISION.
PROGRAMM-ID.ICREER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-PERSONNE1 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE OUTPUT FPERSONNEL.
TQ.
        INITIALIZE PERSONNE1.
        WRITE EGRILLE FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE CORR PERSONNE1 TO ENRPERS.
        WRITE EPERSONNEL INVALID KEY DISPLAY "ERREUR".
        GO TO TQ.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        STOP RUN.


1) Création d'un fichier indéxé


Dans le fichier séquentiel, on rajoute à la fin le nom de la clé précédé d'un K.
Exemple:

  • R ENRPERS
        NOM               32
        PRENOM        32
        ADRESSE        96
        CP                      5
        VILLE               27
        TEL                   20
        SALAIRE            7S2
    K NOM


Retour au programme.



2) Utilisation dans un programme exemple ICREER



ORGANIZATION INDEXED


Ici, on traite le cas de l'indéxé. C'est à dire que la recherche des données se fait dans un petit fichier d'indexe.
Celui-ci fait ensuite référence au fichier principale en se positionnant directement sur le bon enregistrement.

Retour au programme.


RECORD KEY NOM OF ENRPERS


Comme je vous l'ai expliqué ci-dessus, nous utilisons un indexe. Par conséquent, le mieux est de préciser au programme quel est l'indexe. Cependant, il se peut qu'un index ait des doublons (2 personnes ayant le même nom pour notre exemple). Par conséquent, on rajoute WITH DUPLICATES. Cela engendre aussi des modifications dans l'accés des données. Cf Chapitre VIII: D'autres programmes indéxés.

Retour au programme.


ACCESS MODE DYNAMIC.


Il peut arriver que le fichier indéxé soit utilisé en séquentiel. Notamment quand on imprime un listing de tout le fichier. On écrira alors ACCESS MODE SEQUENTIAL. Cependant il existe aussi le mode RANDOM.

Retour au programme.


WRITE EPERSONNEL INVALID KEY DISPLAY "ERREUR".


Le WRITE s'utilise de la même façon que pour le séquentiel à part qu'il y a une condition de plus. En effet, si la clé n'est pas conforme, on effectue un affichage d'erreur.

Retour au programme.


3) Que fait le programme exemple ICREER


Ce programme est le même qu'en séquentiel mais, il est adapté à l'indéxé.

Retour au programme.



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch6 ch8

Chapitre VII: D'autres programmes séquentiels





Que diriez vous si on faisait tous pleins de programmes qui complèterait le programme SCREER. C'est parti.

Programme SAJOUTER

Programme SVOIR

Programme SMODIFIER

Programme SMENU

Que font ces programmes séquentiels ?



Programme SAJOUTER



IDENTIFICATION DIVISION.
PROGRAMM-ID.SAJOUTER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
        ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-PERSONNE1 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE EXTEND FPERSONNEL.
TQ.
        INITIALIZE PERSONNE1.
        WRITE EGRILLE FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE CORR PERSONNE1 TO ENRPERS.
        WRITE EPERSONNEL.
        GO TO TQ.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        GOBACK.


EXTEND FPERSONNEL.


On constate que le programme pour ajouter un enregistrement est le même que pour créer le fichier. Cependant, on a remplacé OUTPUT par EXTEND car on veut rajouter des enregistrements, c'est à dire étendre le fichier.

Retour au programme SAJOUTER.


GOBACK.


Au lieu de mettre un STOP RUN, on met un GOBACK, c'est à dire un retour en arrière car ce programme est lancé à partir d'un programme menu en COBOL donc on retourne dans un programme COBOL.

Retour au programme SAJOUTER.



Programme SVOIR



IDENTIFICATION DIVISION.
PROGRAMM-ID.SVOIR.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
        ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE4 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE4 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE INPUT FPERSONNEL.
TQ.
        READ FPERSONNE AT END GO TO FINFICHIER.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
FINFICHIER.
        MOVE "FIN DU FICHIER, APPUYEZ SUR UNE TOUCHE" TO MESSA.
        WRITE EGRILLE4 FORMAT "PERSONNE4".
        READ FGRILLE.
        IF F3 GO TO FIN.
        CLOSE FGRILLE FPERSONNEL.
        GO TO DEBUT.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        GOBACK.

REDEFINES


Cela sert à redéfinir n'importe quelle zone. Pour le programme, une grille d'écran est une zone de variable à afficher. Donc en redéfinissant une grille en une autre, on peut utiliser plusieurs grilles à la fois.

Retour au programme SVOIR.


INPUT FPERSONNEL.


Ici, on consulte le fichier donc on ne l'ouvre qu'en consultation.

Retour au programme SVOIR.


READ FPERSONNE AT END GO TO FINFICHIER.


Tout comme pour les grilles, on peut lire un fichier afin de récupérer les données sauvegardées. On effectue un READ...AT END... ce qui signifie que tant qu'il n'est pas à la fin du fichier, il continue à le lire. Une fois à la fin, on lui fait exécuter une action.

Retour au programme SVOIR.


CLOSE FGRILLE FPERSONNEL.


Pour repositionner le pointeur au début du fichier à lire, on ferme le fichier et on le réouvre. De plus pour des raisons pratique, ici, on a aussi fermé la grille afin de tout réouvrir en même tant.

Retour au programme SVOIR.



Programme SMODIFIER



IDENTIFICATION DIVISION.
PROGRAMM-ID.SMODIFIER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
        ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE I-O FPERSONNEL.
DEB.
        MOVE SPACES TO MESS.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
TQ.
        READ FPERSONNEL AT END GO TO NONTROUVE.
        IF NEMPLOYE NOT EQUAL NOM OF EPERSONNEL GO TO TQ.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
        MOVE CORR PERSONNE1 TO ENRPERS.
        REWRITE EPERSONNEL.
        CLOSE FPERSONNEL FGRILLE.
        GO TO DEBUT.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        CLOSE FPERSONNEL FGRILLE.
        GO TO DEBUT.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        GOBACK.


I-O FPERSONNEL.


Ici, on consulte et on modifie le fichier donc on ne l'ouvre pour une mise à jour (I-O).

Retour au programme SMODIFIER.


REWRITE.


WRITE -> écrire
REWRITE -> réécrire
On réécrit sur l'enregistrement ce qui sauvegardera les données modifiées.

Retour au programme SMODIFIER.



Programme SMENU



IDENTIFICATION DIVISION.
PROGRAMM-ID.SMENU.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
        CONTROL-AREA FTOUCHES.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-PERSONNE3 OF GPERSONNE.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE.
DEB.
        INITIALIZE CHOIX.
        WRITE EGRILLE FORMAT "PERSONNE3".
        READ FGRILLE.
        IF F3 GO TO FIN.
        IF CHOIX = 1 CALL "SAJOUTER".
        IF CHOIX = 2 CALL "SMOFIFIER".
        IF CHOIX = 3 CALL "SVOIR".
        GO TO DEB.
FIN.
        CLOSE FGRILLE.
        STOP RUN.


INITIALIZE CHOIX.


Nous ne sommes pas obligé de réinitialiser une grille, nous pouvons réinitialiser une zone.

Retour au programme SMENU.


CALL


Cette commande permet d'appeler un autre programme COBOL.

Retour au programme SMENU.



Que font ces programmes séquentiels ?


Le programme SAJOUT est le même que SCREER mise à part le EXTEND qui signifie que l'on ajoute des enregistrements.

Le programme SVOIR permet de consulter la fiche d'une employé mais il n'y a pas de saisie de nom donc on parcourt le fichier du début à la fin jusqu'à ce qu'on ait trouvé. Un bon exercice serait d'adapter ce programme afin de saisir le nom désiré et d'effectuer la recherche automatique (facile!!).

Le programme SMODIFIER permet de modifier un enregistrement et le programme SMENU de lancer tout ces programmes.

La grille d'écran PERSONNE1 contient toutes les infos du fichier PERSONNEL. Chaque zone de donnés a le même nom et la même taille que dans le fichier PERSONNEL sans oublier; que ces zones sont définies en +B. La grille PERSONNE2 possède une zone NEMPLOYE définie en +I et une zone MESS définie en +O. La grille PERSONNE3 est le menu avec une zone CHOIX définie en +I et la grille PERSONNE4 une zone MESSA définie en +O.



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch7 résumé

Chapitre VIII: D'autres programmes indéxés





Et maintenant la même chose avec ICREER.


Programme ICREER

Programme IVOIR

Programme IMODIFIER

Programme ISUPPRIMER

Programme ILISTER

Que font ces programmes indéxés ?




Programme ICREER (avec des doublons)


IDENTIFICATION DIVISION.
PROGRAMM-ID.ICREER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
        COPY DDS-ALL-FORMATS OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE OUTPUT FPERSONNEL.
TQ.
        INITIALIZE PERSONNE1.
        WRITE EGRILLE FORMAT "PERSONNE1".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE CORR PERSONNE1 TO ENRPERS.
        WRITE EPERSONNEL INVALID KEY DISPLAY "ERREUR".
        GO TO TQ.
FIN.
        CLOSE FGRILLE FPERSONNEL.
        STOP RUN.



WITH DUPLICATES


Nous allons traiter tous les programmes avec des indexes identiques (doublons).

Retour au programme ICREER.



Programme IVOIR


IDENTIFICATION DIVISION.
PROGRAMM-ID.IVOIR.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
        SELECT FIMPR ASSIGN TO PRINTER-QSYSORT
                ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
FD FIMPR LABEL RECORD OMITTED.
01 LIGNE PIC X(132).
WORKING STORAGE SECTION.
01 L1.
        02 FILLER PIC X(56) VALUE SPACES.
        02 FILLER PIC X(20) VALUE " VERY GOOD SANCHEZ. ".
        02 FILLER PIC X(56) VALUE SPACES.
01 L2.
        02 FILLER PIC X(5) VALUE "NOM: ".
        02 NOM PIC X(32).
        02 FILLER PIC X(95) VALUE SPACES.
01 L3.
        02 FILLER PIC X(8) VALUE "PRENOM: ".
        02 PRENOM PIC X(32).
        02 FILLER PIC X(92) VALUE SPACES.
01 L4.
        02 FILLER PIC X(9) VALUE "ADRESSE: ".
        02 ADRESSE PIC X(96).
        02 FILLER PIC X(27) VALUE SPACES.
01 L5.
        02 FILLER PIC X(4) VALUE "CP: ".
        02 CP PIC X(5).
        02 FILLER PIC X(5) VALUE SPACES.
        02 FILLER PIC X(7) VALUE "VILLE: ".
        02 VILLE PIC X(27).
        02 FILLER PIC X(84) VALUE SPACES.
01 L6.
        02 FILLER PIC X(5) VALUE "TEL: ".
        02 TEL PIC X(20).
        02 FILLER PIC X(107) VALUE SPACES.
01 L7.
        02 FILLER PIC X(14) VALUE "SALAIRE BRUT: ".
        02 SALAIRE PIC 9(7)V,99.
        02 FILLER PIC X(103) VALUE SPACES.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
88 F5 VALUE "05".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE INPUT FPERSONNEL OUTPUT FIMPR.
DEB.
        INITIALIZE PERSONNE2.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE NEMPLOYE OF EGRILLE2 TO NOM OF EPERSONNEL.
        READ FPERSONNEL INVALID KEY GO TO NONTROUVE.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
TQ.
        READ FPERSONNEL NEXT AT END GO TO NONTROUVE.
        IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
FIN.
        CLOSE FGRILLE FPERSONNEL FIMPR.
        GOBACK.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
        GO TO DEB.
AFFICHE.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
FAFFICHE.
        EXIT.
ALTERNATIVES.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
        IF F5 GO TO IMPRIME.
FALTERNATIVES.
        GO TO DEB.
IMPRIME.
        MOVE L1 TO LIGNE.
        WRITE LIGNE.
        MOVE CORR PERSONNE1 TO L2.
        WRITE LIGNE FROM L2 AFTER 3.
        MOVE CORR PERSONNE1 TO L3.
        WRITE LIGNE FROM L3 AFTER 1.
        MOVE CORR PERSONNE1 TO L4.
        WRITE LIGNE FROM L4 AFTER 1.
        MOVE CORR PERSONNE1 TO L5.
        WRITE LIGNE FROM L5 AFTER 1.
        MOVE CORR PERSONNE1 TO L6.
        WRITE LIGNE FROM L6 AFTER 1.
        MOVE CORR PERSONNE1 TO L7.
        WRITE LIGNE FROM L7 AFTER 1.
FIMPRIME.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.


PERFORM


Un GO TO nous envoie à une étiquette comme en assembleur, un PERFORM appelle une fonction à la fin de laquelle il faut mettre un EXIT pour reprendre le programme principale là où il s'est arrêter.

Retour au programme IVOIR.


READ FPERSONNEL NEXT AT END GO TO NONTROUVE.


La particularité de l'indéxé avec des doublons c'est que l'on cherche le premier indexe de façon normal et les autres de façon séquentiel. De ce fait, on a un NEXT AT END qui permet, si le fichier est terminé, d'effectuer une action.

Retour au programme IVOIR.


IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.


Ce IF permet quand à lui de repérer si l'indexe correspond toujours dans notre recherche séquentiel. En effet, si nous avons 3 DUPONT dans le fichier, la recherche indéxée nous amène sur le premier. La recherche séquentielle nous amène sur le second et le troisième. Une fois que l'on a passé ces trois là, on se retrouve sur un autre nom qui ne correspond plus à l'indexe (par exemple TRUCMUCHE). De ce fait, le IF exclu cette possibilitée et nous évite le parcour du fichier entier quoique de toute façon, en appuyant sur F3, on quitte le programme.

Retour au programme IVOIR.


WRITE LIGNE FROM L2 AFTER 3.


Comme je l'ai déjà expliqué, les grilles, les impressions et les fichiers fonctionnent de la même façon. Par conséquent, on envoi vers l'imprimante la ligne à imprimer par la commande WRITE. Celui-ci prendra les informations contenues dans L2 grace à la commande FROM. Le AFTER précise que l'on passe 3 lignes avant d'imprimer. On peut aussi utiliser BEFORE.

Retour au programme IVOIR.


Programme IMODIFIER


IDENTIFICATION DIVISION.
PROGRAMM-ID.IMODIFIER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE I-O FPERSONNEL.
DEB.
        INITIALIZE PERSONNE2.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE NEMPLOYE OF EGRILLE2 TO NOM OF EPERSONNEL.
        READ FPERSONNEL INVALID KEY GO TO NONTROUVE.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
TQ.
        READ FPERSONNEL NEXT AT END GO TO NONTROUVE.
        IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
FIN.
        CLOSE FGRILLE FPERSONNEL .
        GOBACK.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
        GO TO DEB.
AFFICHE.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
FAFFICHE.
        EXIT.
ALTERNATIVES.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
FALTERNATIVES.
        MOVE CORR PERSONNE1 TO ENRPERS.
        REWRITE EPERSONNEL FORMAT "PERSONNEL".
        GO TO DEB.


REWRITE EPERSONNEL FORMAT "PERSONNEL".


Cela réécrit les modifications sur l'emplacement dans l'ancien enregistrement. Cette manipulation est plus communément appellée Mise A Jour ou plus simplement modification.

Retour au programme IMODIFIER




Programme ISUPPRIMER


IDENTIFICATION DIVISION.
PROGRAMM-ID.ISUPPRIMER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FGRILLE ASSIGN TO WORKSTATION-GPERSONNE
                ORGANIZATION TRANSACTION
                CONTROL-AREA FTOUCHES.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE DYNAMIC.
DATA DIVISION.
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE1.
        COPY DDS-PERSONNE1 OF GPERSONNE.
01 EGRILLE2 REDEFINES EGRILLE1.
        COPY DDS-PERSONNE2 OF GPERSONNE.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
WORKING STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
88 F4 VALUE "04".
88 F6 VALUE "06".
PROCEDURE DIVISION.
DEBUT.
        OPEN I-O FGRILLE I-O FPERSONNEL.
DEB.
        INITIALIZE PERSONNE2.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
        IF F3 GO TO FIN.
        MOVE NEMPLOYE OF EGRILLE2 TO NOM OF EPERSONNEL.
        READ FPERSONNEL INVALID KEY GO TO NONTROUVE.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
TQ.
        READ FPERSONNEL NEXT AT END GO TO NONTROUVE.
        IF NEMPLOYE OF EGRILLE2 NOT = NOM OF EPERSONNEL GO TO NONTROUVE.
FTQ.
        PERFORM AFFICHE.
        GO TO ALTERNATIVES.
FIN.
        CLOSE FGRILLE FPERSONNEL .
        GOBACK.
NONTROUVE.
        MOVE "CET EMPLOYE N EXISTE PAS" TO MESS.
FNONTROUVE.
        GO TO DEB.
AFFICHE.
        MOVE CORR ENRPERS TO PERSONNE1.
        WRITE EGRILLE1 FORMAT "PERSONNE1".
        READ FGRILLE.
FAFFICHE.
        EXIT.
ALTERNATIVES.
        IF F3 GO TO FIN.
        IF F4 GO TO TQ.
        IF F6 GO TO SUPPRIME.
FALTERNATIVES.
        GO TO DEB.
SUPPRIME.
        DELETE FPERSONNEL RECORD INVALID KEY GO TO NONTROUVE.
        MOVE "EMPLOYE LOURDE, TAPER LE CLAVIER" TO MESS.
        WRITE EGRILLE2 FORMAT "PERSONNE2".
        READ FGRILLE.
FSUPPRIME.
        CLOSE FGRILLE FPERSONNEL.
        GO TO DEBUT.


DELETE FPERSONNEL RECORD INVALID KEY GO TO NONTROUVE.


L'anglais est une langue bien faite tout de même. En regardant le nom du programme est la première commande de cette ligne, on en déduit en un clin d'oeil qu'il sagit de l'effacement d'un enregistrement avec vérification de la clé (index).

Retour au programme ISUPPRIMER




Programme ILISTER


IDENTIFICATION DIVISION.
PROGRAMM-ID.ILISTER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
        SELECT FPERSONNEL ASSIGN TO DATABASE-PERSONNEL
                ORGANIZATION INDEXED
                RECORD KEY NOM OF ENRPERS WITH DUPLICATES
                ACCESS MODE SEQUENTIAL.
        SELECT FIMPR ASSIGN TO PRINTER-QSYSORT
                ORGANIZATION SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FPERSONNEL LABEL RECORD STANDARD.
01 EPERSONNEL.
        COPY DDS-ALL-FORMATS OF PERSONNEL.
FD FIMPR LABEL RECORD OMITTED.
01 LIGNE PIC X(132).
WORKING STORAGE SECTION.
01 L1.
        02 FILLER PIC X(56) VALUE SPACES.
        02 FILLER PIC X(20) VALUE " VERY GOOD SANCHEZ. ".
        02 FILLER PIC X(56) VALUE SPACES.
01 L2.
        02 FILLER PIC X(5) VALUE "NOM: ".
        02 NOM PIC X(32).
        02 FILLER PIC X(95) VALUE SPACES.
01 L3.
        02 FILLER PIC X(8) VALUE "PRENOM: ".
        02 PRENOM PIC X(32).
        02 FILLER PIC X(92) VALUE SPACES.
01 L4.
        02 FILLER PIC X(9) VALUE "ADRESSE: ".
        02 ADRESSE PIC X(96).
        02 FILLER PIC X(27) VALUE SPACES.
01 L5.
        02 FILLER PIC X(4) VALUE "CP: ".
        02 CP PIC X(5).
        02 FILLER PIC X(5) VALUE SPACES.
        02 FILLER PIC X(7) VALUE "VILLE: ".
        02 VILLE PIC X(27).
        02 FILLER PIC X(84) VALUE SPACES.
01 L6.
        02 FILLER PIC X(5) VALUE "TEL: ".
        02 TEL PIC X(20).
        02 FILLER PIC X(107) VALUE SPACES.
01 L7.
        02 FILLER PIC X(14) VALUE "SALAIRE BRUT: ".
        02 SALAIRE PIC 9(7)V,99.
        02 FILLER PIC X(103) VALUE SPACES.
PROCEDURE DIVISION.
DEBUT.
        OPEN INPUT FPERSONNEL OUTPUT FIMPR.
        MOVE L1 TO LIGNE.
        WRITE LIGNE.
TQ.
        READ FPERSONNEL AT END GO TO FIN.
        MOVE CORR PERSONNE1 TO L2.
        WRITE LIGNE FROM L2 AFTER 3.
        MOVE CORR PERSONNE1 TO L3.
        WRITE LIGNE FROM L3 AFTER 1.
        MOVE CORR PERSONNE1 TO L4.
        WRITE LIGNE FROM L4 AFTER 1.
        MOVE CORR PERSONNE1 TO L5.
        WRITE LIGNE FROM L5 AFTER 1.
        MOVE CORR PERSONNE1 TO L6.
        WRITE LIGNE FROM L6 AFTER 1.
        MOVE CORR PERSONNE1 TO L7.
        WRITE LIGNE FROM L7 AFTER 1.
FTQ.
        GO TO TQ.
FIN.
        CLOSE FPERSONNEL FIMPR.
        GOBACK.


ACCESS MODE SEQUENTIAL.


Le fichier est indéxé mais pour imprimer tous les enregistrements du premier au dernier, le mieux est de l'ouvrir en sequentiel.

Retour au programme ILISTER




Que font ces programmes indéxés ?

Le programme ICREER est le même que celui vu dans le chapître VI à part qu'il permet d'avoir des index indentiques (doublons). De plus, comme je l'ai déjà expliqué, en indéxé, les programmes de création et d'ajout sont les mêmes.

Le programme IVOIR permet de visualiser un employé. On saisie sont nom dans une grille et le programme affiche l'employé correspondant. On peut aussi l'imprimer.

Le programme IMODIFIER sert à modifier les données d'un employé comme son adresse ou son numéro de téléphone. Il utilise la commande REWRITE. Tout ce que contient ce programme et les suivants a été vu dans les chapitres précédents. Et vu que vous n'êtes pas tous idiots, comme tout informaticien qui se respecte, le code est évident...

Le programme ISUPPRIMER efface un enregistrement et le programme ILISTER imprime tous les enregistrements. Ce programme à la particularité d'être déclaré en ACCESS MODE SEQUENTIAL afin de préciser que exeptionnellement on y accède en séquentiel.

Enfin, comme dans les programmes précédents:

  • -la touche F3 arrète le programme
    -la touche F4 passe à l'enregistrement suivant
    -la touche F5 imprime
    -la touche F6 supprime.

Tout cela doit ce trouver sur les grilles d'écran.

La grille d'écran PERSONNE1 contient toutes les infos du fichier PERSONNEL. Chaque zone de données a le même nom et la même taille que dans le fichier PERSONNEL sans oublier que ces zones sont définies en +B. La grille PERSONNE2 possède une zone NEMPLOYE définie en +I et une zone MESS définie en +O. La grille PERSONNE3 est le menu avec une zone CHOIX définie en +I et la grille PERSONNE4 une zone MESSA définie en +O.

Vous avez remarqué que nous n'avons pas fait de programme IMENU. C'est tout simplement que ce programme est le même que SMENU avec un programme en plus et les noms de programmes différents; donc étant donné que maintenant vous êtes grands, vous arriverez sûrement à le créer vous même sinon, laissez tomber l'informatique, c'est pas pour vous!!!



Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

ch8 conclusion

Résumé








Chapître précédent!! Chapître suivant!!

RETOUR AU SOMMAIRE

résumé index

Conclusion




En conclusion, nous vous avons mis dans ces cours quelques explications et plusieurs programmes. Ceux-ci n'expliquent pas tout ce qui est possible de faire avec un AS/400 et en programmation COBOL mais ce sont de bonnes références qui peuvent servir de modèles pour tout les programmes que vous aurez à écrire. En développant un peu tout ce qui est contenu dans ce dossier, il est possible de programmer honorablement en COBOL. Bien entendu, rien ne vaut la pratique et les exercices.

Le COBOL peut paraitre à priori un langage que je qualifierai de "bizarre", cependant il me semble assez facile à maitriser. De plus il ne faut pas oublier que c'est peut être celui qui est le plus utilisé sur moyen et gros système comme par exemple dans des entreprises tel que AUCHAN, LEROY MERLIN ou BOULANGER.

N'oublions pas non plus dans l'histoire l'AS/400 qui malgré son aspect rudimentaire et son écran monochrome est tout de même une machine très puissante. C'est sûr que vous ne ferez pas tourner DUKE NUKEM mais si on regarde de plus près on se rend compte très rapidement qu'un PC ne lui arrive pas à la cheville. Par exemple, on ne peut pas prendre un PC et lui brancher 3 écrans avec trois claviers et ouvrir trois session différentes. Pour cela, il faut 3 PC ce qui signifie 3 microprocesseurs avec 3 fois de la mémoire etc... Un AS/400 étant un vrai multitaches (je me rie de Bilou 95...), on peut lui connecter plus de 50 écrans et claviers.

Enfin, si vous aimez l'informatique, que vous voulez en faire votre métier, je vous conseil vivement l'I.U.T. A de Villeneuve d'Ascq.





résumé index

RETOUR AU SOMMAIRE

conclusion

Index du COBOL sur AS/400

 


Chapitre I: Premiers pas en COBOL


Chapitre II: Les différentes déclarations


Chapitre III: Les opérations arithmétiques simples


Chapitre IV: Utilisation des grilles d'écran


Chapitre V: Utilisation des fichiers séquentiels


Chapitre VI: Utilisation des fichiers indéxés


Chapitre VII: D'autres programmes séquentiels


Chapitre VIII: D'autres programmes indéxés


Chapître précédent!!

RETOUR AU SOMMAIRE



17/11/2011
0 Poster un commentaire

Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 6 autres membres