COBOL OMGL 1
Concevoir et mettre en oeuvre une application ANALYSE REALISATION 2
Réalisation Types d'applications Gestion Scientifique Réseau Multimédia Choix d'un système Choix d'un langage Système OS/400 Langage Cobol 3
Application de Gestion Stockage Affichage Saisie Traitements Impression 4
Modélisation d'un traitement 5
Interfaces Utilisateur Console Windows OS400 6
7
8
Notion de Fichier Fichier Produit Pour chaque produit (1 produit 1 enregistrement) Il faut connaître ses caractéristiques afin de pouvoir effectuer les traitements (accès direct et séquentiel) : - ajouter un nouveau produit - modifier un produit (ex: quantité en stock) - supprimer un produit - rechercher un produit et afficher ses caractéristiques (consulter) - imprimer le catalogue (lister) - 9
Notion d'enregistrement Fichier Produit Informations relatives à un produit (enregistrement) : - Code produit - Libellé produit - Quantité en stock - Prix unitaire de vente Clé ou identifiant 10
Unité fonctionnelle Description «algorithmique» du traitement Exemple: Pour chaque produit commandé: Saisir un numéro de produit. Tant que le numéro de produit n est pas trouvé, le ressaisir. Calculer Afficher Demander validation, si OK imprimer la facture 11
Fichier Imprimante Structure du document différents modèles de lignes ETAT DES STOCKS Date : 31 août 2003 N produit Libellé Quantité en stocks.................... 12
Chapitre 1 Introduction à l AS/400 13
Login 14
ou SIGNOFF 15
Commande de création de fichier source Valider par F4 CReaTe SouRCe Physical File 16
Nom du fichier source choisi par l utilisateur pour une application donnée 17
Structure d un fichier SOURCE Un fichier SOURCE AS400 est comparable à un répertoire sous Windows Il peut contenir plusieurs MEMBRES ( un fichier Windows) Un membre peut être Une description d interface utilisateur (images-écran) de type DSPF (DiSPlay File) Un programme Cobol de type CBL (CoBoL) Un fichier de données de type PF (Physical File) 18
19
Démarrage de PDM (Program Development Manager), valider par Entrée 20
21
Nom du fichier source 22
23
Nom du membre contenant Les FORMATS (images-écrans) 24
Langage DDS (Data Description Specification) complexe Pouvant être généré automatiquement par SDA (Screen Design Aid) 25
26
27
Mettre à jour les images-écrans 28
Un FORMAT Une image-écran 1 = Ajouter une nouvelle image-écran 12 = Modifier une image-écran 29
Membre DSPF Un membre DSPF peut contenir PLUSIEURS images-écran. Chaque image-écran est un FORMAT Un format est utilisable en programmation (ex : langage Cobol). Un même membre peut être utilisé dans différents programmes. 30
Conception d une image-écran (FORMAT) 1) Placer les libellés Titre Libellé de chaque zone de saisie Autres libellés (aide utilisateur) 2) Définir les zones de saisie 3) Classer les zones de saisie 31
Nom du format Création d un nouveau format 32
33
NE JAMAIS UTILISER LE CLAVIER NUMERIQUE NI LA TOUCHE (BackSpace) 34
1) Définir le titre en le plaçant entre apostrophes 2) Valider par ENTREE 35
Zone d attributs AC pour centrer < pour décaler à gauche U pour souligner * A découvrir en TP! Etc Utiliser F1 pour aide en ligne 36
AC, puis ENTREE 37
38
Même principe pour placer les Libellés des zones de saisie Et les aides utilisateurs 39
+ définit une zone de saisie ou affichage B zone de caractères 9 zone numérique Puis valider par ENTREE 40
Nommer les zones de saisie 41
42
Puis F4 pour pouvoir classer les zones 43
Vérifier qu il n y a pas d espaces Dans la colonne Zone 44
45
Déplacer un bloc *DATE *TIME *USER voir en TP 46
3 = pour déplacer == pour dupliquer 1 2 47
UNE SEULE FOIS F3 PUIS PLUSIEURS FOIS ENTREE jusqu à l écran suivant. 48
49
Dans la phase de sauvegarde vérifier que l on bien reçu cet écran 50
Chapitre 2 Introduction au langage Cobol Interface COBOL SDA 51
COBOL Common Organization Business Oriented Language Basé sur la langue anglaise Structuré en Divisions Sections Paragraphes» Phrases, verbes, noms, opérateurs, signes de ponctuation 52
Structure générale IDENTIFICATION DIVISION Nom du programme ENVIRONMENT DIVISION Interface système d exploitation DATA DIVISION Structure des données PROCEDURE DIVISION Description du traitement 53
IDENTIFICATION DIVISION IDENTIFICATION DIVISION. PROGRAM-ID. EXEMPLE1. Mot-clé Nom du programme Lettre suivie de lettres et/ou de chiffres 54
ENVIRONMENT DIVISION Nom de la variable Fichier utilisée dans Le programme Cobol ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. Nom du Membre FILE-CONTROL. Contenant les images-écran * Interface système SELECT F-ECRANS ASSIGN TO WORKSTATION-ECRANS ORGANIZATION A B TRANSACTION. 55
Le membre DSPF contenant les images-écrans (formats) a été créé à l aide d un nom, exemple ECRANS: Dans le programme Cobol, il faut définir une variable associée au membre ECRANS. Ce nom peut être quelconque (ex SCREENWY45RT). Pour faciliter l écriture du programme, nous SUGGERONS d utiliser la convention : F-nom du membre DSPF Exemple : F-ECRANS 56
A B DATA DIVISION DATA DIVISION. Nom du fichier FILE SECTION. Nom d enregistrement FD F-ECRANS. 01 E-ECRANS PIC X(2000). WORKING-STORAGE SECTION. Déclarations des variables 57
Variable pour le programme Cobol F-ECRANS Associée à 01 E-ECRANS Zone d échange 58
PROCEDURE DIVISION Marge A PROCEDURE DIVISION. MAIN. Phrases (traitement)en marge B STOP RUN. Autres paragraphes («méthodes» Java) 59
Phrases : affichage d une image-écran OPEN I-O F-ECRANS WRITE E-ECRANS FORMAT "nom du format" READ F-ECRANS CLOSE F-ECRANS 60
Utilisation des verbes OPEN et CLOSE OPEN I-O F-ECRANS Vérification de l existence du membre associé par le select et des droits d accès Possibilité d exécuter plusieurs affichages et saisies (séquences Write, Read) CLOSE F-ECRANS A faire lorsque le fichier n est plus utilisé 61
Fonctionnement des instructions WRITE et READ 1 WRITE E-ECRANS FORMAT "nom du format" 1 Affichage de l image-écran READ F-ECRANS 2 3 2 Gère les saisies 3 Validation par la touche Entrée 62
Création d'un programme Cobol 63
Nom du programme Cobol 64
Pour l utilisation de l éditeur, Voir en TP 65
C=Exécuter 66
67
WoRKSPooLFile 68
69
70
Chapitre 3 Saisir, Calculer, Afficher 71
Algorithme Saisir deux nombres Calculer leur moyenne Afficher la moyenne Étape 1 : Définir l interface utilisateur : images-écran Étape 2 : Algorithme Étape 3 : Écrire le programme Cobol 72
Étape 1 Format SAISIE Champs : A, B 73
Étape 1 Format : AFFICHAGE Un champ : MOYENNE 74
Étape 2 : Algorithme Saisir les nombres A et B à l aide du format "SAISIE" MOYENNE = (A + B ) /2 Afficher MOYENNE à l'aide du format "AFFICHAGE" 75
IDENTIFICATION DIVISION. PROGRAM-ID. CALCMOY. ENVIRONMENT DIVISION. SELECT F-ECRANS ASSIGN TO WORKSTATION-ECRANS ORGANIZATION TRANSACTION. DATA DIVISION. FILE SECTION. FD F-ECRANS. 01 E-ECRANS PIC X(2000). WORKING-STORAGE SECTION. 77 SOMME PIC 9(10). 01 LESFORMATS. COPY DDS-SAISIE OF ECRANS. Cobol AS/400, J. Marengo, COPY DDS-AFFICHAGE OF ECRANS. 76
PROCEDURE DIVISION. * Début du programme MAIN. OPEN I-O F-ECRANS * Saisie de A et B INITIALIZE SAISIE WRITE E-ECRANS FROM SAISIE FORMAT "SAISIE" READ F-ECRANS INTO SAISIE * Calcul de la moyenne ADD A B GIVING SOMME DIVIDE SOMME BY 2 GIVING MOYENNE * Affichage de la moyenne WRITE E-ECRANS FROM AFFICHAGE FORMAT "AFFICHAGE" READ F-ECRANS * Fin du programme CLOSE F-ECRANS 77
Structure de la "Working" WORKING-STORAGE SECTION. Déclarations des variables (zones de mémoire) utilisables dans la PROCEDURE DIVISION. 2 types de variables. Variables simples 77 SOMME PIC 9(10). Variables structures 01 LESFORMATS.. 78
Les variables simples Nombre maximum de caractères pour la variable TITRE 1 TITRE PIC X(80). 77 I PICTURE 99. Image ou type de la variable Nom-donnée ou identificateur Marge B Marge A 79
Les pictures élémentaires Zones de caractères ("String" java) PIC X(27). Zones numériques Entiers non signés PIC 9(18). Entiers signés ("int" java) PIC S9(4). Réels ("double" java) PIC S9(5)V99. 80
Les structures 01 LESFORMATS. COPY DDS-SAISIE OF ECRANS. COPY DDS-AFFICHAGE OF ECRANS. 05 SAISIE. 06 A PIC S9(10). 06 B PIC S9(10). 05 AFFICHAGE. Nom format 06 MOYENNE PIC S9(10). LES FORMATS 01 05 SAISIE 06 A AFFICHAGE B MOYENNE 81
Le verbe DISPLAY DISPLAY "I = " I Permet d'afficher, pour mise au point, de façon rudimentaire - Comparable au System.out.println du langage JAVA 82
L'instruction d'affectation MOVE MOVE { Identificateur Littéral } TO MOVE 0 TO MOVE 1 TO MOVE " " TO MOVE ALL "*" TO MOVE "DUPOND" TO Identificateur [ Identificateur ] I J K NOM NOM NOM Règles d'utilisation du MOVE, voir page 14 poly de Cobol 83
Précision des résultats Le programmeur choisit la précision des résultats Exemple : 77 TTC PIC 9(10)V99. Attention à prévoir suffisamment de chiffres pour les résultats de calcul Exemple: 77 I PIC 9. MOVE 8 TO I ADD 2 TO I DISPLAY I affiche 0 84
Addition ADD 3 TO I ADD 4 I TO J ADD 1 TO K I=I+3 J=J+4+I K ++ ADD N1 N2 GIVING N ADD N GIVING Z N = N1 + N2 Voir Poly Cobol, page 17 85
Soustraction SUBTRACT 1 FROM J SUBTRACT J K FROM L J=J-1 L=L-J-K SUBTRACT 1 FROM J GIVING K K=J-1 SUBTRACT K L M FROM J GIVING I I=J-K-L-M Voir poly Cobol, page 18 86
Multiplication MULTIPLY 2 BY I I=I*2 MULTIPLY I BY 2 MULTIPLY I BY J GIVING K K=I*J Voir poly Cobol, page 18 87
DIVISION DIVIDE DIVIDE DIVIDE DIVIDE DIVIDE I I I I I INTO J J=J/I BY J INTO J GIVING K K= J/I BY J GIVING K K=I/J INTO J GIVING K REMAINDER R K=J/I R=J%I DIVIDE I BY J GIVING K REMAINDER R K=I/J R=I%J Voir poly Cobol, page 19 88
Chapitre 4 Schémas de contrôle 89
Expressions conditionnelles (booléennes) Java Cobol < < ou LESS THAN > > ou GREATER THAN <= NOT > >= NOT < == = ou EQUAL TO!= NOT = OR && AND! NOT Voir poly Cobol, page 21-22 90
ATTENTION I + 1 < K * 9 Un espace (minimum) obligatoire avant et après chaque symbole d'opérateur 91
Conditions de classes Applicables aux PICTURES en X NOM IS ALPHABETIC Retourne VRAI si NOM ne contient que des lettres ou des espaces CODEPOSTAL IS NUMERIC Retourne VRAI si CODEPOSTAL ne contient que des chiffres NUMERIC et ALPHABETIC peuvent être précédés de NOT 92
L'instruction IF (sans ELSE) Java if ( expr. Cond. ) { } Cobol IF expr. Cond. END-IF 93
L'instruction IF (avec ELSE) Java if ( expr. Cond. ) { } else { } Cobol IF expr. Cond ELSE Poly page 22-24 END-IF 94
L'instruction EVALUATE Java switch ( expression) { case valeur : break; default : } Cobol EVALUATE expression WHEN valeur WHEN OTHER END-EVALUATE 95
L'instruction PERFORM (while java) s=0; i=1; while(i<10) { s=s+i; i++; } MOVE 0 TO S MOVE 1 TO I PERFORM UNTIL I NOT < 10 ADD I TO S ADD 1 TO I END-PERFORM Poly page 29-30 96
Structuration de la PROCEDURE DIVISION PROCEDURE DIVISION. MAIN. "Méthode principale" STOP RUN. "autres méthodes" 97
Définition d'une "méthode" void nommethode () { } NOMMETHODE. instructions. Marge B Poly page 75 Un point pour finir la méthode Marge A Pour les "méthodes" avec passage de paramètres, Voir sous-programmes externes (poly page 97). 98
Appel d'une "methode" PROCEDURE DIVISION. MAIN. OPEN I-O F-ECRANS PERFORM SAISIR-A-ET-B PERFORM CALCUL-MOYENNE PERFORM AFFICHER-RESULTAT CLOSE F-ECRANS STOP RUN. SAISIR-A-ET-B. nommethode(); PERFORM NOMMETHODE INITIALIZE SAISIE WRITE E-ECRANS FROM SAISIE FORMAT "SAISIE" READ F-ECRANS INTO SAISIE. CALCUL-MOYENNE. ADD A B GIVING SOMME DIVIDE SOMME BY 2 GIVING MOYENNE. AFFICHER-RESULTAT. WRITE E-ECRANS FROM AFFICHAGE FORMAT "AFFICHAGE" READ F-ECRANS. 99
Chapitre 5 Images-écran Touches de fonctions Recouvrement 100
Gestion des touches de fonctions Rappel AS/400 Validation par la touche ENTREE Passage au champ suivant par la touche TAB Annulation par F12 Sortie (exit) par F3 101
Déclaration d'une touche de fonction dans l'image-écran Aide utilisateur 102
ECRANS LESSILOS 103
104
F CF03 CFxx (01-24) numéro de la touche de fonction 105
Interface en Cobol SELECT F-ECRANS ASSIGN TO WORKSTATION-ECRANS ORGANIZATION TRANSACTION CONTROL-AREA TF.. WORKING-STORAGE SECTION 01 TF PIC XX. 88 F3 VALUE "03". 88 F12 VALUE "12". 88 etc. Poly Cobol, Page 74 106
Afficher image-écran "SAISIE" TQ l'utilisateur n'a pas appuyé sur F3 calculer la moyenne et afficher le résultat Afficher image-écran "SAISIE" FTQ PERFORM SAISIR-A-ET-B PERFORM UNTIL F3 PERFORM CALCUL-MOYENNE PERFORM AFFICHER-RESULTAT PERFORM SAISIR-A-ET-B END-PERFORM Voir tr 99 pour la définition des méthodes 107
Grilles en recouvrement (OVERLAY) ETAT D'UN SILO Numéro de silo _ Quantité en stocks Écran initial Entrée pour continuer F1 pour avoir de l'aide Un numéro de silo est une lettre de A à J DEUX FORMATS Lorsque l'utilisateur appuie sur F1 108
LESSILOS ECRANS 109
F9 110
LESSILOS ECRANS 111
112
Format Aide 113
LESSILOS ECRANS 114
115
116
Exemple Cobol WRITE E-ECRANS FROM SILO FORMAT "SILO" READ F-ECRANS INTO SILO IF F1 WRITE E-ECRANS FORMAT "AIDE" READ F-ECRANS END-IF 117
Chapitre 6 Les fichiers Application aux fichiers "séquentiels indexés" 118
Organisations de fichiers Trois types d organisation : Séquentielle Accès direct Séquentiel indexé Primitives ouverture (OPEN) fermeture (CLOSE) lecture d un enregistrement (READ) écriture d un enregistrement (WRITE) 119
Organisation séquentielle Fichier Enregistrement 2 Ouverture en lecture OU Ouverture en écriture 1 Ouverture Lecture ou écriture 120
Organisation accès direct Fichier 1 Enregistrement 2 3 4 5 Lecture ou écriture à partir du numéro d enregistrement 121
Organisation séquentielle indexée Fichier Enregistrement Accès séquentiel Lecture ou écriture à partir de la clé d enregistrement 122
Structure d un enregistrement d un fichier séquentiel indexé Champs Clé d enregistrement Chaîne de caractères 123
Utilisation d'un fichier séquentiel indexé Étape 1 création au niveau du système AS/400 Étape 2 programme de mise à jour en langage Cobol 124
Création au niveau système 125
126
R CODESPOSTE 5A Identifiant (clé d'accès) Utiliser F4 pour bien positionner les colonnes 127
128
DiSPlay Physical File Member 129
FIN DE L'ETAPE 1 130
Étape 2 Mise à jour d'un fichier séquentiel indexé SELECT F-CODESPOSTE ASSIGN TO DATABASE-CODESPOSTE ORGANIZATION INDEXED RECORD KEY CODEP OF CODESPOSTE ACCESS DYNAMIC. FD F-CODESPOSTE. 01 E-CODESPOSTE. COPY 05 CODESPOSTE. 06 CODEP PIC X(5). 06 BURDIS PIC X(27). DDS-CODESPOSTE OF CODESPOSTE. OPEN I-O F-CODESPOSTE.. CLOSE F-CODESPOSTE 131
Algorithme Afficher un menu, 4 choix possibles: - ajouter un nouvel enregistrement Code postal Bureau distributeur Saisie - consulter (afficher) un enregistrer Code postal Bureau Distributeur - modifier le contenu d'un enregistrement Affichage Code postal Bureau distributeur Souligné = =>Recherche - supprimer un code postal Code postal Bureau distributeur 132
B FORMAT MENU : CHOIX, CODEP Code postal FORMAT MAJENR : BURDIS AS/400, J. Marengo,: MSG FORMAT Cobol LIGNEMSG 133
Méthode RECHERCHE Donnée : la clé CODEP de CODESPOSTE Résultat : un booléen TROUVE (vrai ou faux) Traitement : rechercher dans le fichier CODESPOSTE s'il existe déjà un enregistrement ayant cette valeur de clé. 2 TROUVE PIC 9. F-NomPF RECHERCHE. MOVE 1 TO TROUVE READ F-CODESPOSTE INVALID KEY MOVE 0 TO TROUVE END-READ. 134
Algorithme de la méthode AJOUTER Donnée : CODEP de CODESPOSTE Traitement : appeler RECHERCHE Si TROUVE = 1 afficher un message d'erreur Sinon saisir l'ensemble des informations complémentaires à l'aide du format MAJENR copier MAJENR dans CODESPOSTE ajouter un nouvel enregistrement Fsi 135
Méthode AJOUTER AJOUTER. PERFORM RECHERCHE IF TROUVE = 1 MOVE "CLE DEJA EXISTANTE" TO MSG PERFORM AFFMSG ELSE INITIALIZE MAJENR WRITE E-ECRANS FROM MAJENR FORMAT "MAJENR" READ F-ECRANS INTO MAJENR MOVE CORR MAJENR TO CODESPOSTE PERFORM AJOUTENREG END-IF. 136
MOVE CORRESPONDING MOVE CORR S1 TO S2 01 S2. 02 B 02 E 02 A 01 S1. 02 A 02 B 02 C "MOVE A OF S1 TO A OF S2 MOVE B OF S1 TO B OF S2" 137
Méthodes AJOUTENREG et AFFMSG E-NomPF AJOUTENREG. WRITE E-CODESPOSTE INVALID KEY MOVE "ERR AJOUT" TO MSG PERFORM AFFMSG END-WRITE. AFFMSG. WRITE E-ECRANS FROM LIGNEMSG FORMAT "LIGNEMSG" READ F-ECRANS. 138
Méthode consulter Donnée: la clé CODEP de CODESPOSTE Traitement: Appeler RECHERCHE Si TROUVE = 1 copier CODESPOSTE dans MAJENR afficher l'enregistrement (format MAJENR) Sinon afficher un message d'erreur Fsi 139
Méthode Modifier Donnée : CODEP de CODESPOSTE Traitement : Appeler RECHERCHE Si TROUVE = 0 afficher un message d'erreur Sinon copier CODESPOSTE dans MAJENR afficher l'enregistrement, récupérer les données modifiées copier MAJENR DANS CODESPOSTE REECRIRE l'enregistrement Fsi REWRITE E-NomPF INVALID KEY. END-REWRITE 140
Méthode Supprimer Donnée : la clé CODEP de CODESPOSTE Traitement: Appeler RECHERCHE Si TROUVE = 0 afficher un message d'erreur Sinon copier CODESPOSTE dans MAJENR afficher l'enregistrement Si l'utilisateur confirme la suppression SUPPRIMER l'enregistrement Fsi DELETE F-NomPF INVALID KEY Fsi END-DELETE 141
Noms de fichiers et d'enregistrements Nom de Fichier Nom d'enregistrement F-xxxxxxx E-xxxxxxxxx OPEN X CLOSE X READ X DELETE X WRITE X REWRITE X START X 142
Chapitre 7 Traitement séquentiel de fichier Application aux fichiers imprimantes 143
Traitement séquentiel d'un fichier Se positionner au début du fichier Lire un enregistrement Tant que l'on est pas arrivé à la fin du fichier Traiter l'enregistrement Lire un enregistrement Fin Tant Que 144
Application aux fichiers séquentiels-indexés, accès DYNAMIC * Se positionner au début du fichier MOVE " " TO clé d'enregistrement MOVE 0 TO B-FICH-VIDE START f-xxxxxx KEY NOT < clé d'enregistrement INVALID KEY MOVE 1 TO B-FICH-VIDE END-START IF B-FICH-VIDE = 1 PERFORM TRAITER-FICHIER-VIDE ELSE PERFORM PARCOURS-SEQUENTIEL END-IF. 145
Méthode PARCOURS-SEQUENTIEL PARCOURS-SEQUENTIEL. MOVE 0 TO BFIN READ f-xxxxxx NEXT AT END MOVE 1 TO BFIN END-READ PERFORM UNTIL BFIN = 1 PERFORM TRAITER-ENREGISTREMENT READ f-xxxxxx NEXT AT END MOVE 1 TO BFIN END-READ END-PERFORM. 146
Exemple d'application : fichier Imprimante Ligne(s) titre Ligne(s) enregistrement Provenant du Parcours séquentiel 147
Fichier imprimante COBOL SELECT F-IMPR ASSIGN TO PRINTER-QSYSPRT. FD F-IMPR. 01 E-IMPR PIC X(132). 148
Les lignes d'impression -Définition en WORKING 01 LIGNE-CEREALE. 02 NUMCEREALE PIC XX. 02 FILLER PIC XXX VALUE " * ". 02 PUACEREALE PIC 99V,99. -Utilisation de l'instruction STRING MOVE " " TO E-IMPR STRING "LISTE DES CEREALES DU MOIS " MOIS DELIMITED BY SIZE INTO E-IMPR 149
Comment imprimer? -Ligne définie en WORKING WRITE E-IMPR FROM LIGNE-CEREALE AFTER 2 -Ligne E-IMPR déjà construite par STRING WRITE E-IMPR AFTER 2 150
Comment obtenir la date système 01 DATESYSTEME. 02 ANNEE PIC 99. 02 MOIS PIC 99. 02 JOUR PIC 99. ACCEPT DATESYSTEME FROM DATE Voir poly page 61 151
PARCOURS-SEQUENTIEL. OPEN OUTPUT F-IMPR Exemple ACCEPT DATESYSTEME FROM DATE MOVE " " TO E-IMPR STRING "LISTE DES CEREALES DU MOIS " MOIS DELIMITED BY SIZE INTO E-IMPR WRITE E-IMPR AFTER 2 MOVE 0 TO BFIN READ F-CEREALE NEXT AT END MOVE 1 TO BFIN END-READ PERFORM UNTIL BFIN = 1 MOVE CORR CEREALE TO LIGNE-CEREALE WRITE E-IMPR FROM LIGNE-CEREALE AFTER 1 READ F-CEREALE NEXT AT END MOVE 1 TO BFIN END-READ END-PERFORM CLOSE F-IMPR. 152
Chapitre 8 Sous-programmes externes 153
A quoi ça sert? - Constituer une "boite à outils" : Définir des "méthodes" ou "sous-programmes" pouvant être appelés à partir d'un programme quelconque. - Possibilité de passages de paramètres (données et/ou résultats) 154
Exemples - Vérifier si une date est correcte. - Connaissant un code (numéro), récupérer un libellé (chaîne de caractères) associé. - Imprimer une lettre type (on fournit comme données les nom et adresse d'une personne) 155
Appel d'un sous-programme CALL "VERIFNOT" USING NOTEMATH BNOTE - NOTEMATH et BNOTE constituent les paramètres. - Chaque paramètre peut être "donnée" et/ou "résultat": le sous-programme peut éventuellement modifier la valeur d'un quelconque paramètre - Le nombre de paramètres peut être quelconque. - Un appel de sous-programme sans paramètre ne doit pas utiliser la clause USING. Ex: CALL "SPG" - Le nom du sous-programme doit être écrit entre guillemets 156
Définition d'un sous-programme IDENTIFICATION DIVISION. PROGRAM-ID. VERIFNOTE. ENVIRONMENT DIVISION. DATA DIVISION. LINKAGE SECTION. 77 LANOTE PIC S99. 77 RESULTAT PIC S9. PROCEDURE DIVISION USING LANOTE RESULTAT. MAIN. IF LANOTE NOT < 0 AND LANOTE NOT > 20 OR LANOTE = 99 MOVE 0 TO RESULTAT ELSE MOVE 1 TO RESULTAT END-IF GOBACK. 157
Chapitre 9 Les vecteurs 158
Vecteurs int[] t=new int[5]; Indices 0 à 4 t[i]=0; t[i+1]=0;??? 01 VECTEUR-T. 02 T OCCURS 5 PIC 9(6). INDICES 1 à 5 MOVE 0 TO T ( I ) ADD 1 I GIVING K MOVE 0 TO T ( K ) MOVE ZERO TO VECTEUR-T 159
Tableaux int[][] t=new int[3][5]; 01? MOVE ZERO TO LIGNE-T ( I ) System.out.println(t[i][j]); TABLEAU-T. 02 LIGNE-T OCCURS 3. 03 T OCCURS 5 PIC 99. DISPLAY T(I,J) 160
Tableaux de structure 01 GROUPE. 02 ETUDIANTS OCCURS 26. 03 NOM PIC X(30). 03 AGE PIC 99. 77 ETU PIC X(32). MOVE 21 TO AGE ( 12 ) MOVE "DUPOND" TO NOM ( I ). MOVE ETUDIANTS ( I ) TO ETU MOVE ETUDIANTS ( J ) TO ETUDIANTS ( I ) MOVE ETU TO ETUDIANTS ( J ) 161
Initialisation de vecteurs 01 TABLE-SEMAINE. 02 SEMAINE. 03 FILLER PIC X (8) VALUE "LUNDI". 03 FILLER PIC X(8) VALUE "DIMANCHE". 02 SEMAINE-BIS REDEFINES SEMAINE. 03 JOUR OCCURS 7 PIC X(8). 162
Exemple de sous-programme IDENTIFICATION DIVISION. PROGRAM-ID. TRAJOUR. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 TABLE-SEMAINE. 02 SEMAINE. 03 FILLER PIC X (8) VALUE "LUNDI". 03 FILLER PIC X(8) VALUE "DIMANCHE". 02 SEMAINE-BIS REDEFINES SEMAINE. 03 JOUR OCCURS 7 PIC X(8). LINKAGE SECTION. 77 NUMJOUR PIC 9. 77 NOMJOUR PIC X(8). PROCEDURE DIVISION USING NUMJOUR NOMJOUR. MAIN. IF NUMJOUR < 1 OR NUMJOUR > 7 MOVE ALL "?" TO NOMJOUR ELSE MOVE JOUR ( NUMJOUR ) TO NOMJOUR END-IF GOBACK. 163
Chapitre 10 Fichiers relatifs et Fichiers séquentiels 164
Structure du fichier 1 2 3 4.. RELATIVE KEY 165
Pas de clé dans l'enregistrement 166
Programme de création DYNAMIC 167
168
Programme de Mise à jour DYNAMIC 169
PROCEDURE DIVISION Identique aux fichiers Cf Séquentiel indexéséquentiels indexés 170
RAPPEL Les valeurs des clés relatives doivent être dans l'intervalle [ 1.. Nombre Maximum d'enregistrements ] HashCode (cf cours d'analyse) 171
Fichiers séquentiels ORGANIZATION SEQUENTIAL ACCESS SEQUENTIAL DDS : R nomenregistrement nomchamp nomchamp 172
Accès Création.. OPEN OUTPUT nomfichier WRITE nomenregistrement END-WRITE 173
Accès Consultation.. OPEN INPUT nomfichier READ nomfichier AT END END-READ 174
Accès Mise à jour (disque dur) Ajout de nouveaux à la fin du fichier OPEN EXTEND nomfichier WRITE nomenregistrement END-WRITE Modification d enregistrements existants OPEN I-O nomfichier READ nomfichier AT END. END-READ REWRITE nomenregistrement END-REWRITE 175
Chapitre 11 L'instruction SORT 176
F-CODESPOSTE UNIQUE R CODESPOSTE CLE BURDIS K CLE 5A 27A R SORTFICH Z SORT 200A F-SORTFICH R CODESTRIES CLE BURDIS 5A 27A F-CODESTRIES 177
IDENTIFICATION DIVISION. PROGRAM-ID. SORTEXEMPL. ENVIRONMENT DIVISION. SELECT F-CODESPOSTE ASSIGN TO DATABASE-CODESPOSTE ORGANIZATION INDEXED ACCESS DYNAMIC RECORD KEY CLE OF CODESPOSTE OF E-CODESPOSTE. SELECT F-SORTFICH ASSIGN TO DATABASE-SORTFICH. SELECT F-CODESTRIES ASSIGN TO DATABASE-CODESTRIES. DATA DIVISION. FILE SECTION. FD F-CODESPOSTE. 01 E-CODESPOSTE. COPY DDS-CODESPOSTE OF CODESPOSTE. FD F-CODESTRIES. 01 E-CODESTRIES. COPY DDS-CODESTRIES OF CODESTRIES. SD F-SORTFICH. 01 E-SORTFICH. COPY DDS-CODESPOSTE OF CODESPOSTE. 178
WORKING-STORAGE SECTION. PROCEDURE DIVISION. MAIN. SORT F-SORTFICH ASCENDING BURDIS OF CODESPOSTE OF E-SORTFICH DESCENDING CLE OF CODESPOSTE OF E-SORTFICH USING F-CODESPOSTE GIVING F-CODESTRIES STOP RUN. 179
IDENTIFICATION DIVISION. PROGRAM-ID. SORTEXEMPL. ENVIRONMENT DIVISION. SELECT F-TRI ASSIGN TO DATABASE-SORTFICH. DATA DIVISION. FILE SECTION. SD F-TRI. 01 E-TRI. 05 ELTV. 06 NUMERO PIC 9999. 06 QUANTITE PIC 9(8). WORKING-STORAGE SECTION. 77 I PIC 9999. 01 T. 02 VT OCCURS 100. 06 NUMERO PIC 9999. 06 QUANTITE PIC 9(8). END-PERFORM. 180
PROCEDURE DIVISION. MAIN. PERFORM VARYING I FROM 100 BY -1 UNTIL I = 0 MOVE I TO NUMERO OF VT ( I ) MULTIPLY I BY 2 GIVING QUANTITE OF VT ( I ) END-PERFORM SORT F-TRI ASCENDING NUMERO OF ELTV INPUT PROCEDURE DEBUT-TRI OUTPUT PROCEDURE FIN-TRI PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3 DISPLAY VT ( I ) END-PERFORM. STOP RUN. DEBUT-TRI. PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100 RELEASE E-TRI FROM VT ( I ) END-PERFORM. FIN-TRI. PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100 RETURN F-TRI INTO VT ( I ) AT END DISPLAY "BUG" END-RETURN END-PERFORM 181
Chapitre 12 Codage des informations Traitement de chaînes de caractères 182
Codage des informations SPECIFIQUE A CHAQUE COMPILATEUR UNIQUEMENT POUR LES PICTURES DE TRAITEMENT 1 CHIFFRE PAR OCTET, 77 N PIC S9(4). Soit 4 octets pour l'exemple OU 77 N PIC S9(4) USAGE DISPLAY. 77 N PIC S9(4) USAGE COMP-4. 77 N PIC S9(4) USAGE COMP-3. un demi-octet pour le signe un demi-octet pour un chiffre Nb de chiffres Nb Octets 1-4 2 short 5-9 4 int 10-18 8 long Java 183
L'instruction INSPECT nv : nom d'une variable en Picture X nc : nom d'une variable en Picture 9 INSPECT nv TALLYING nc FOR ALL "**" INSPECT nv TALLYING nc FOR LEADING "0" INSPECT nv TALLYING nc FOR CHARACTERS BEFORE INITIAL "I" INSPECT nv REPLACING CHARACTERS BY "0" INSPECT nv REPLACING FIRST "T" BY "L" INSPECT nv TALLYING nc FOR CHARACTERS AFTER INITIAL "S" REPLACING ALL "P" BY "T" 184
Les instructions STRING et UNSTRING ligne="nom "+nom+" PRENOM "+prenom; STRING "NOM " NOM " PRENOM " PRENOM INTO LIGNE nom=zone.substring(0,zone.indexof(" "); an=zone.substring(zone.indexof(" ")+1); UNSTRING ZONE DELIMITED BY " " INTO NOM AN 185
Génération d'une image-écran à partir d'une description de fichier Libellés des zones de saisie 186
Démarrer SDA, 187
Appuyer sur F10 188
189
Résultat de la sélection 190
191
192
70 BURDIS A B 27 13 042 O 193
Annexes 194
Comment détecter les erreurs de compilation - Option 2 sous PDM devant le nom du programme CBL - Entrée - F15 (Shift F3) -2 - Entrée - F4 - PgDn (éventuellement) pour trouver le dernier nom identique au nom du programme -1 - Entrée - Entrée -B - PgUp 195
Comment interpréter les erreurs d'exécution - Déplacer le curseur sur la ligne où se trouve le message - F1 - F10 - lire le message (voir sur transparent suivant, les messages les plus fréquents) - Entrée -C - Entrée Comment déboguer Sans débogueur Avec débogueur Compiler 14 CB Exécuter C DB 196
Messages d'erreurs fréquents à l'exécution Enregistrement XXX non trouvé Nom de format incorrect dans un write MCH 1202 Erreur dans une donnée décimale Utilisation d'une variable numérique non ou mal initialisée MCH 3601 Pointeur non défini Instruction (write, ou read, ou rewrite, ou start) effectuée sur un fichier non ouvert (voir l'open) MCH 0603 indice hors limite Indice de vecteur ou tableau hors limite 197
Touches de fonction F13 ==> Shift F1 F14 ==> Shift F2 F15 ==> Shift F3 F16 ==> Shift F4 F17 ==> Shift F5 F18 ==> Shift F6 F19 ==> Shift F7 F20 ==> Shift F8 F21 ==> Shift F9 F22 ==> Shift F10 F23 ==> Shift F11 F24 ==> Shift F12 198
AVANT APRES 199