Cours gratuits » Cours informatique » Cours programmation » Cours Cobol » Outils de base pour débuter la programmation avec le langage Cobol

Outils de base pour débuter la programmation avec le langage Cobol

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

 

 DCABE

 

ESAT-DI [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

Cours CBL-85

 

            1

11/10/2009

     Sommaire

Principes de base

                    

                       A1          généralités           . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             2

                                            A2          pseudo-code de l’algorithme de tri              . . . . . . . . . . . . . . . . . . . . . . . . . . . .              2

                                            A3          principe des 3 phases       . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . .             3

                                            A4          le fichier tri         . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                             4

                                            A5          principe d’appel des programmes d’entrée et sortie             . . . .  . . . .                 4

Le verbe SORT

                                            B1           format                  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             6

                                            B2          règles                     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            6

                                                                   Résumé des règles essentielles                . . . . . . . . . . . . . . . . . . . . . . . . . . . .              9

Exemples

                                                            jeu d’essai utilisé pour tous les exemples (D1 à D7)               . . . . . . . . . .               10

                                            D1          cas “ using-giving ”          . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           12

                                            D2          cas “ using-output procédure ”    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           13

                                            D3          cas “ input procedure output procedure”                 . . . . . . . . . . . . . . . . . . . .            17

                                            D4          cas “ input procedure giving ”      . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         20

                                            D5          cas d’un programme contenant plusieurs tris         . . . . . . . . . . . . . . . . . . . .            22

                                            D6          cas d’un “ using ” avec plusieurs fichiers                  . . . . . . . . . . . . . . . . . . . .            30

                                            D7          cas d’un résultat en séquentiel-indexé                        . . . . . . . . . . . . . . . . . . . .            33

                                            D8          cas d’une modification de collating sequence          . . . . . . . . . . . . . . . . . . . .            36

La fusion des fichiers

                                            E1           principe                . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             38

                                            E2           le verbe MERGE              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            38

                                            E3           exemples              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            39

se n? 1 A21 : rangement des donn?es dans ESAT-DI [LRE] le fichier triphase n? 2: ex?cution du tri phase n? 3 cas n? 1 : traitement des donn?es t cas n? 2cas n? 4cas n? 3 ri?es        2 Cours CBL-85rangement direct dans le Fichier tri              CHAPÎTRE 10  :    rangement direct dans le Fichier r?sultatLe tri , la fusion des fichiers-

11/10/2009

 ?x?cution

rangement par programme de certains articles dans le fichier triautomatiquetraitement des donn?es tri?es du fichier tri par programme    du tri

                                     programme1 dit “ d’entr?e ”         A) Principes de baseprogramme2 dit “ de sortie ”

Le tri “cobol” comprend toujours 3 phases exécutées successivement :

? Les informations à trier sont placées dans un fichier temporaire dit “fichier-tri” ? exécution du tri (selon les critères fournis par le verbe SORT) : à l’issue , on obtient un       fichier-tri trié.

? traitement des informations triées.

Il est préférable de considérer le (ou l’ensemble des ) tri(s)  comme un programme à part entière rangé dans une section à part qui possède son propre pseudo-code (indépendant du problème à traiter ) ; celui-ci correspond toujours à l’un des 4 cas suivants :

début tri trier le fichier tri en ordre croissant sur clé-1 clé-2 .. décroissant sur clé-i croissant sur

après avoir exécuté le programme d ’entrée  programme1 avant d’exécuter     le programme de sortie   programme2 Fin tri

début tri trier le fichier tri en ordre croissant sur clé-1 clé-2 .. décroissant sur clé-i croissant sur

après avoir rangé le fichier à trier directement dans le fichier temporaire de tri avant d’exécuter    le programme de sortie  programme2 Fin tri

début tri trier le fichier tri en ordre croissant sur clé-1 clé-2 .. décroissant sur clé-i croissant sur

après avoir exécuté le programme d ’entrée  programme1

avant de ranger directement le fichier tri (trié) dans un fichier disque en sortie

Fin tri

début tri trier le fichier tri en ordre croissant sur clé-1 clé-2 .. décroissant sur clé-i croissant sur

après avoir rangé le fichier à trier directement dans le fichier temporaire de tri avant de ranger directement le fichier tri (trié) dans un fichier disque en sortie

Fin tri

                          données en entrée                                                          résultat en sortie

                                                                        OU                    OU

 A3

                         ESAT-DI [LRE]                                                                                                                                                                      3

                         Cours CBL-85                               CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

11/10/2009

principe des 3 phases :  Au démarrage ( phase n° 1 ) , il y a deux solutions exclusives :

soit on range tout le fichier en entrée (à trier) dans le fichier tri en utilisant la clause

USING du verbe SORT : dans ce cas la description du fichier temporaire de tri doit être identique

à celle du fichier à trier.(même longueur d’enregistrement , mêmes rubriques ..) L’écriture dans le fichier tri est transparente pour le programmeur : elle est réalisée automatiquement par le système ainsi que l’ouverture et la fermeture du fichier en entrée.

 (ou exclusif)

soit on écrit un programme appelé “ programme d’entrée ” (clause INPUT PROCEDURE du verbe SORT ) qui permet de n’écrire que certains articles ( ou que certains champs utiles pour le problème à résoudre ) dans le fichier tri : dans ce cas , la description du fichier temporaire de tri peut être différente de celle du fichier en entrée. L’écriture dans le fichier tri est réalisée par le programmeur avec le verbe RELEASE (même fonctionnement que le verbe WRITE).

Lorsque la phase 1 est terminée , l’exécution du tri du fichier temporaire de tri est lancée automatiquement par le système ( phase N° 2) ; quand elle est terminée , toutes les informations triées selon des critères (ou clés ) définis dans le verbe SORT par les clauses ON ASCENDING KEY ( <=> en ordre croissant sur ..) ou ON DESCENDING KEY (<=> en ordre décroissant sur ..) sont disponibles dans le fichier tri.

Le traitement de ces données disponibles dans le fichier tri constitue la phase N° 3 ; dans celle-ci , on a le choix (exclusif) entre deux possibilités :

soit on considère que le programme est fini et on range le fichier tri (trié) dans un fichier permanent en sortie en utilisant la clause GIVING du verbe SORT.

Dans ce cas l’écriture sur le fichier résultat est transparente pour le programmeur : elle est réalisée automatiquement par le système (ainsi que l’ouverture et la fermeture du fichier résultat). (ou exclusif)

soit on veut traiter les données qui sont triées dans le fichier tri (par exemple faire un module d’édition ou d’affichage à l’écran ..) : dans ce cas , il faut réaliser un programme dit “ de sortie ” (clause OUTPUT PROCEDURE du verbe sort ) . Pour développer cette partie , le programmeur doit lire le fichier tri (trié ) à l’aide du verbe RETURN (même fonctionnement que le verbe READ pour un fichier en organisation séquentielle).

 

ESAT-DI   [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

Cours CBL-85

 

4

11/10/2009

ESAT-DI   [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

Cours CBL-85

 

            5

11/10/2009

Le fichier tri

Le fichier tri est ouvert et fermé par le système ( => pas d’open ; pas de close ).

La description de l’enregistrement du fichier tri se fait en file section dans une phrase SD (sort description) au lieu du FD (file description ) pour les fichiers classiques.

Les clés de tri mentionnées dans le verbe SORT (trier) dans les clauses “ ON ASCENDING KEY ” ,

“ ON DESCENDING KEY ” doivent se trouver dans la description de l’enregistrement du fichier tri (dans la phrase SD).

Le fichier tri est en organisation séquentielle ==> accès séquentiel.

Comme tout fichier , le fichier tri doit faire l’objet d’une phrase select dans l’input-ouput section.

Dans un programme d’entrée , le fichier tri est considéré comme un fichier en sortie puisqu’on écrit dessus avec le verbe RELEASE. Dans un programme de sortie , le fichier tri est considéré comme un fichier en entrée puisqu’on le lit avec le verbe RETURN.

Si on veut trier plusieurs fois les mêmes données sur des critères différents (cas d’un programme à n tris ) , on peut utiliser plusieurs fois le même fichier tri mais il est souvent plus simple pour des problèmes à tris multiples d’utiliser plusieurs fichiers de tri (cf exemples parag. D).

Le principe d’appel des programmes d’entrée et de sortie

 

  A4A5

 

 EXEMPLE :

Imaginons que nous ayons un programme d’entrée appelé “ choix-eleve ” à exécuter avant de trier les informations en ordre décroissant sur la rubrique “ moyenne ” et en ordre croissant sur les zones

“ nom ” et “ prénom ” et que nous voulions , une fois les informations triées , lancer l’exécution d’un programme de sortie appelé “ edition-de-la-classe ” Le pseudo-code du module de tri serait :

début tri

trier le fichier tri         en ordre décroissant sur moyenne en ordre croissant sur nom , prénom

après avoir exécuté le programme d ’entrée  “choix-eleve” avant d’exécuter    le programme de sortie  “edition-de-la-classe”

Fin tri

En cobol , celà se traduirait par une phrase SORT contenant les clauses :

INPUT PROCEDURE CHOIX-ELEVE

OUTPUT PROCEDURE EDITION-DE-LA-CLASSE

Pour comprendre le processus d’appel de ces programmes (avant et après tri) , il suffit de savoir que ces clauses (input et ouput procedure ) fonctionnent comme l’instruction PERFORM dont le format est le suivant : PERFORM nom-procédure 1 ou nom de section 1  [ THRU nom procédure-2 ou nom de section 2 ]

INPUT PROCEDURE CHOIX-ELEVE ? PERFORM CHOIX-ELEVE (ou choix-eleve est un nom de section)

après avoir exécuté CHOIX-ELEVE , le programme continue en séquence à partir de l’instruction qui

suit l’appel


branchement à

                   stop run.                                                                                                                                          l’étiquette

“edition-de-la-classe ”

choix-eleve section.

debut.

open input feleve  exécution retour read feleve        du à l ‘instruction   at end           programme suivante           d’entrée

close feleve.

edition-de-la-classe section.

debut.

open output imprimante     exécution return ftri                du at end                  programme de sortie

close imprimante.

 B) Le verbe SORT

FORMAT

ASCENDING

SORT nom du fichier tri  ?   ON KEY clé n°1    clé n° 2 clé n° i  ?

DESCENDING

ASCENDING

                                                            ON KEY clé n°j    clé n° k clé n° n

DESCENDING

WITH DUPLICATES IN ORDER                        ?

COLLATING SEQUENCEnom d’alphabet      ?

         
 

 priorit?

   

ESAT-DI   [LRE][

              CHAPÎTRE 1

0  :   

 

Le tri , la fusion des fichiers[[ ]-]]]

       page 10-7

 

]]

 

Cours CBL-85[

   
 

         11/10/2009  -

11/10/2009

 

 B21

 INPUT PROCEDURE nom-procédure-1    THRU nom-procédure-2 ?

                                                  USINGnom de fichier-1     nom de fichier-i...

                                   OUTPUT PROCEDURE                     nom-procédure-3 THRU nom-procédure-4

?

                                                  GIVING                                     nom de fichier-résultat

QUELQUES REGLES CONCERNANT L ‘ UTILISATION DU VERBE SORT

?Le fichier temporaire utilisé pour le tri

Le fichier de tri doit être déclaré dans une phrase SD en file section.

La description de l’enregistement logique doit contenir les clés de tri (clé1,clé2..).

Si la description contient plusieurs niveaux 1 , la description d’une clé ne doit figurer que dans une seule.

?Les clés ( ou critères ) de tri

Le tri s’exécute à partir des différentes clés en les considérant en priorité :

de la gauche vers la droite puis de haut en bas.

[si plusieurs articles ont une même valeur pour la zone “ clé-1 ” , ils seront triés sur “ clé-2 ” puis ,si c’est encore le cas pour la valeur de “ clé-2 ” , la sélection se fera sur “ clé-

i ”  . . ..puis .sur clé-j , .jusqu’à  “ clé-n ”.]

Les clés ne doivent pas être des zones répétées (“ occursées ”) ni être subordonnées à une zone contenant cette clause. Il ne doit pas y avoir recouvrement de clés    (                            ==> interdit   ) Les clés ne doivent pas être incluses        ( ==> interdit   )

Les clés de tri ne doivent pas être des zones à longueur variable.

NB : Pour un tri , le nombre de clés et la somme de leur longueur ont une limite (dépendant du matériel utilisé ) largement suffisante pour traiter tous les problèmes ( ex :en 1980, en CBL74 sur DPS8-BULL , on pouvait disposer de 18 critères de tri pour une longueur maximale de 1280 caractères ).

?problèmes des doublons

Si 2 (ou n) articles ont les mêmes valeurs pour toutes les clés de tri et que cette clause (“ duplicates in order ” est spécifiée :

on les retrouve dans l’ordre dans lequel ils ont été écrits dans le fichier tri : c’est-à-dire l’ordre dans lequel on a fait des “ RELEASE ” dans l’input procedure ou l’ordre dans lequel ils étaient dans le fichier d’origine si on a utilisé USING.

Si la clause “ duplicates .. ” n’a pas été mentionnée , l’ordre dans lequel on retrouve ces doublons après l’exécution du tri est indéfini.

?Alphabet

Normalement ,le tri s’exécute en comparant les zones “ clé ” caractère par caractère (de la gauche vers la droite ) en utilisant l’ordre de la table ASCII.(collating sequence = ASCII = NATIVE = STANDARD-1 = option par défaut)

On peut changer cet ordre utilisé pour les comparaisons en donnant le nom d’un autre alphabet ( EBCDIC ,

NATIVE, STANDARD-1,STANDARD-2, GBCD, alphabet personnalisé , .)  :

en inscrivant cette clause “  collating  ” dans le verbe sort

ou en fixant un autre alphabet par défaut au niveau du programme en renseignant les paragraphes “ object-computer ” et “special-names”.

(la clause collating au niveau du verbe sort est prioritaire par rapport à celle fixée au niveau du programme.)

?phase n° 1 :  avant tri

Le(s) fichier(s) inscrit(s) derrière USING fait l’objet d’une description en file section dans une phrase

FD ; néanmoins il n’est pas nécéssaire de décomposer l’enregistrement en sous-groupes et zones élémentaires. [ uniquement un niveau 1 : ex :  1 enreg-du-fichier-entree pic x(100). ]

Le fichier (physique) mentionné derrière USING peut être le même que celui indiqué derrière GIVING

Si la clause USING a été utilisée et que le fichier tri possède des enregistrements à longueur variable , la taille des articles du fichier en entrée (nom-fichier-1 ) ne doit pas être plus petite que le plus petit article du fichier tri ni plus grande que le plus grand du fichier tri.

Si la taille des enregistrements du fichier tri est fixe (cas général) , la taille des articles du fichier mentionné derrière USING doit être inférieure ou égale à cette longueur (égale dans le cas général). [dans le cas “ inférieur ” les articles du fichier tri sont complètés par des espaces à droite]

Sur certains systèmes (compilateurs) , nom-procédure-1 et nom-procédure-2 doivent être des noms de section

( => pour éviter des problèmes de portabilité , il vaut mieux toujours mettre l’input procedure dans une section à part).

On ne doit pas trouver de verbe “ return ” (lecture du fichier tri) dans une input procedure , par contre il est impératif d’utiliser le verbe “ release ” (pour écrire dans le fichier tri).


ESAT-DI   [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

Cours CBL-85

 

9

On ne doit pas trouver de verbe “ SORT ” ni de “ MERGE ” dans une input procedure.

En principe , derrière la clause USING , on inscrit le nom du fichier en entrée à trier néanmoins il est possible de ranger dans le fichier tri et de trier plusieurs fichiers différents ( ne possédant pas forcément les mêmes types ou tailles d’enregistements ).

?phase n° 2 : aprè tri

Le fichier inscrit derrière GIVING fait l’objet d’une description en file section dans une phrase FD ; néanmoins il n’est pas nécéssaire de décomposer l’enregistrement en sous-groupes et zones élémentaires. [ uniquement un niveau 1 : ex :  1 enreg-resultat-sortie pic x(150). ]

Le fichier (physique) mentionné derrière GIVING peut être le même que celui indiqué derrière USING

Si la clause GIVING a été utilisée avec un fichier à enregistrements à longueur variable , la taille des articles du fichier tri (nom-fichier-tri ) ne doit pas être plus petite que le plus petit article de ce fichier (nom-fichier-resultat) ni supérieure au plus grand .

Si la taille des enregistrements du fichier résultat (GIVING ) est fixe (cas général) et que  la taille des articles du fichier tri est plus petite , il y a complément à droite par des espaces sur les enregistrements du fichier résultat.

Sur certains systèmes (compilateurs) , nom-procédure-3 et nom-procédure-4 doivent être des noms de section

( => pour éviter des problèmes de portabilité , il vaut mieux toujours mettre l’output procedure dans une section à part).

On ne doit pas trouver de verbe “ release ” (écriture sur le fichier tri) dans un output procedure , par contre il est impératif d’y trouver le verbe “ return ” (pour lire et traiter  le fichier tri). On ne doit pas trouver de verbe “ SORT ” ni “ MERGE ”dans une output procedure.

Si le fichier résultat est en organisation séquentielle-indexée , la première clé de tri correspond à la clé primaire => elle doit être rangée en ordre croissant (ON ASCENDING).

 DC

 ouverture du fichier en sortie par le programmeur ouverture du fichier en entr?e par le programmeurESAT-DI   [LRE]                                                                        EXECUTION DU TRI instruction suivante   SORT ouverture automatique du fichier en entr?eouverture automatique du fichier en sortie                                                                        10

lecture du fichier tri (RETURN) par le programmeurlecture du fichier en entr?e (READ) par le programmeurCours CBL-85                   CHAPÎTRE 10  :    lecture automatique du fichier en entr?electure automatique du fichier tri (tri?)Le tri , la fusion des fichiers-

                                                                                                                                                                                                                                           -

?criture sur le fichier en sortie (WRITE) par le programmeur?criture sur le fichier tri (RELEASE) par le programmeur         ?criture automatique sur le fichier tri?criture automatique sur le fichier en sortie fermeture du fichier en sortie par le programmeurfermeture du fichier en entr?e par le programmeur       fermeture automatique du fichier en entr?efermeture automatique du fichier en sortie

Résumé des règles essentielles

                                                                                          Input procedure                                                using

                                                                              Output procedure                                                         giving

INPUT PROCEDURE

OUTPUT PROCEDURE

avant le tri

après le tri

comporte 1 ou plusieurs sections écrites consécutivement indépendantes de la procédure de sortie

comporte 1 ou plusieurs sections écrites consécutivement indépendantes de la procédure d’entrée

comporte au moins un verbe RELEASE

comporte au moins un verbe RETURN

la procédure d’entrée permet de créer ou modifier ou sélectionner des enregistrements avant qu’ils ne soient triés.

la procédure de sortie permet de créer ou modifier ou sélectionner des enregistrements qui ont été triés et qui se trouvent dans le fichier tri.

ne doit pas contenir de verbe SORT ou MERGE ou

RETURN

ne doit pas contenir de verbe SORT ou MERGE ou

RELEASE

en principe : ne doit pas contenir de branchement hors de la procédure d’entrée (il est notamment interdit d’aller exécuter , à l’aide d’un GO TO ,PERFORM,..une partie de la procédure de sortie ).

en principe : ne doit pas contenir de branchement hors de la procédure de sortie (il est notamment interdit d’aller exécuter , à l’aide d’un GO TO ,PERFORM,..une partie de la procédure d’entrée )

.

n°   1      01   DIR   KKKK015   DE LA TRONCHEN         ROSINE                 0000000000   700208   IPE   1425 %%%%% n°   2      01   DIR   KKKK011   DRIPUCON PAUL                   0000000000   600208   IPE   1685   %%%%% n°   3      02  ETU   KKKK028   CARMICON               JEAN                   0000000000 420914   TEF   1725   %%%%% n°   4      02   ATE   KKKK029 PETOUNET               MARC                   0000000000   520208   IPE 1225   %%%%% n°   5      02   ETU   KKKK030   CASBONBINI MARCEL                 0000000000   620914   TEF   1236   %%%%% n°   6 02   ATE   KKKK031   RALATOUF               ETIENNE                0000000000 690208   OS1   1350   %%%%% n°   7      01   ETU   KKKK012   PLINDESCENS            JEAN-PAUL 0000000000   510914   IEF   1428   %%%%% n°   8      01   DIR   KKKK013 DANLEPAN               ARNAUD                 0000000000   630208   IPE 1536   %%%%% n°   9      01   DIR   KKKK014   BROTIGNAC              URBAIN                 0000000000 680914   TEF   1536   %%%%% n°  10      02   ETU   KKKK016 RASPITOU               JEAN                   0000000000   450914   TEF 1425   %%%%% n°  11      02   DIR   KKKK017   ZYVANISEVITCHSKY JULES                  0000000000   420208   IPE   1550   %%%%% n°  12 01   DIR   KKKK001   LAGAL                  JACQUES                0000000000 440208   IPE   1200   %%%%% n°  13      02   ETU   KKKK002 PIOLA                  JEAN                   0000000000   420914   TEF 1625   %%%%% n°  14      01   DIR   KKKK003   PLANI JACQUES                0000000000   440903   OS1   1400   %%%%% n°  15 02   ETU   KKKK132   BOVEAU                 JEAN                   0000000000 590914   OS1   1622   %%%%% n°  16      02   DIR   KKKK133 BISTOUKET              PIERRE                 0000000000   590208   OS1 1204   %%%%% n°  17      02   ETU   KKKK134   ROYER-MOLLOUX VERONIQUE              0000000000   550914   IEF   1624   %%%%% n°  18      02 DIR   KKKK135   CASANOVIEN             ALICE                  0000000000 550208   IPE   1250   %%%%% n°  19      02   ETU   KKKK136 MULLER                 AGATHE                 0000000000   550914   IEF 1525   %%%%% n°  20      01   ETU   KKKK150   BOLE-CASOU EDMOND                 0000000000   690914   OS1   1425   %%%%% n°  21 01   DIR   KKKK151   CATIFLON               JACQUES                0000000000 690208   OS1   1700   %%%%% n°  22      01   DIR   KKKK004   FIRNEROT ANDRE                  0000000000   470129   OS1   1625   %%%%% n°  23 02   ETU   KKKK005   FOUMI                  PIERRE                 0000000000 400813   OS1   1700   %%%%% n°  24      01   ETU   KKKK006 LABLONDE               GILLES                 0000000000   370524   IEF 1265   %%%%% n°  25      01   ETU   KKKK007   LABURNE SERGE                  0000000000   460208   TEF   1325   %%%%% n°  26 01   ETU   KKKK008   PINOUFLET              JEAN                   0000000000 450914   IEF   1500   %%%%% n°  27      01   ATE   KKKK035 AVIRY                  LUC                    0000000000   700208   OS1 1658   %%%%% n°  28      01   ETU   KKKK036   BRUTASSOU VIVIANE                0000000000   420914   TEF   1578   %%%%% n°  29 01   ATE   KKKK037   RICARD                 HUGUES                 0000000000 740208   OS1   1546   %%%%% n°  30      01   ETU   KKKK038 PERNOD                 CHRISTIAN              0000000000   720914   OS1 1756   %%%%% n°  31      01   ATE   KKKK039   VISQUI DANIEL                 0000000000   420208   OS1   1825   %%%%% n°  32 01   ETU   KKKK040   LAVIANDE               DELPHINE               0000000000 430914   OS1   1902   %%%%% n°  33      01   ETU   KKKK146   LE NAIN                SATURNIN               0000000000   570914   OS1   1425 %%%%% n°  34      01   DIR   KKKK147   DEJARDIN JACQUES                0000000000   570208   IPE   1400   %%%%% n°  35      01  ETU   KKKK148   CORNINOULLOT           JEAN                   0000000000 570914   OS1   1425   %%%%% n°  36      01   DIR   KKKK149 ZWUITYCHYTONNINNI      MARCEL                 0000000000   690208   OS1 1400   %%%%% n°  37      02   ETU   KKKK034   LABAF JEAN                   0000000000   700914   TEF   1625   %%%%% n°  38 02   ETU   KKKK058   MURINI                 ANGE                   0000000000 690914   OS1   1105   %%%%% n°  39      02   DIR   KKKK059   CHIASSOU               ZOE 0000000000   690208   IPE   1500   %%%%%


12

  -

n°  40      02   ETU   KKKK060 CHIASSOUX-BERNARD      ANTHONY                0000000000   520914   OS1 1825   %%%%% n°  41      02   DIR   KKKK061   EBOUNARD BERTRAND               0000000000   510208   IPE   1200   %%%%% n°  42      02  ETU   KKKK062   PISSOUNET              MARCEL                 0000000000 540914   OS1   1925   %%%%% n°  43      02   DIR   KKKK063 PISSOUNET              JACQUES                0000000000   530208   OS1 1550   %%%%% n°  44      01   ATE   KKKK041   POPINARD ELODIE                 0000000000   440208   OS1   1900   %%%%% n°  45 01   ETU   KKKK042   BOUBI                  DAMIEN                 0000000000 450914   IEF   1723   %%%%% n°  46      01   ATE   KKKK043   CRAPIGNARD             CLAIRE 0000000000   460208   TEF   1500   %%%%% n°  47      01   ETU   KKKK044 RALATOUF               EDITH                  0000000000   470914   IEF 1425   %%%%% n°  48      01   ATE   KKKK045   RALATOUF               ALBERT                 0000000000 490208   TEF   1200   %%%%% n°  49      01   ETU   KKKK046 LABAF                  JEAN                   0000000000   490914   TEF 1626   %%%%% n°  50      01   ATE   KKKK047   LAGALLE SABINE                 0000000000   490208   TEF   1745   %%%%% n°  51 01   ETU   KKKK048   CIPROUTO               CHARLOTTE              0000000000 420914   TEF   1425   %%%%% n°  52      02   ATE   KKKK049 FROGONNO               BERTHE                 0000000000   430208   TEF 1300   %%%%% n°  53      02   ETU   KKKK050   CHIALOUX FLORENCE               0000000000   410914   TEF   1725   %%%%% n°  54 02   DIR   KKKK051   PASTISSE               ALPHONSE               0000000000 410208   IPE   1800   %%%%% n°  55      02   ETU   KKKK052 ROUPIGNAC              THIERRY                0000000000   500914   TEF 1425   %%%%% n°  56      02   DIR   KKKK053   DE LA CARTOUCHE JACQUES                0000000000   500208   IPE   1345   %%%%% n°  57      02 DIR   KKKK137   JACQUOUX               JACQUES                0000000000 550208   OS1   1552   %%%%% n°  58      02   ETU   KKKK138 LABROUILLE             ISIDORE                0000000000   550914   IPE 1625   %%%%% n°  59      02   DIR   KKKK139   SOMMIER-DUVALLON MARCELLIN              0000000000   520208   OS1   1200   %%%%% n°  60 02   ETU   KKKK140   DESSALON               OLIVIA                 0000000000 510914   IEF   1625   %%%%% n°  61      01   DIR   KKKK141   GORRIGNAC DENIS                  0000000000   510208   IPE   1300   %%%%% n°  62 01   ETU   KKKK142   PINEUX                 FIRMIN                 0000000000 520914   IEF   1325   %%%%% n°  63      01   DIR   KKKK143 PINUCHE                VALENTIN               0000000000   570208   IPE 1300   %%%%% n°  64      01   ETU   KKKK144   SAN ANTONIO ANTOINE                0000000000   570914   IEF   1325   %%%%% n°  65 01   DIR   KKKK145   GRADUCOUX              JUSTINE                0000000000 570208   IPE   1300   %%%%% n°  66      01   ETU   KKKK064 PINARDOT               JEAN                   0000000000   530914   IEF 1655   %%%%% n°  67      01   DIR   KKKK065   GRADUCHON CARINE                 0000000000   530208   OS1   1210   %%%%% n°  68 01   ETU   KKKK066   CRABALOT               CHARLES                0000000000 550914   TEF   1825   %%%%% n°  69      01   DIR   KKKK067 EUGRAFAL               AMADEUS                0000000000   551228   INS 1975   %%%%% n°  70      01   ETU   KKKK068   LAPIOL JEANNE                 0000000000   420914   TEF   1025   %%%%% n°  71 01   DIR   KKKK069   NITOUCHE               THERESE                0000000000 530208   OS1   1000   %%%%% n°  72      01   ETU   KKKK070 NEUROBIO               ALAIN                  0000000000   530914   TEF 0825   %%%%% n°  73      01   DIR   KKKK071   QUIRINETTI BRICE                  0000000000   540208   OS1   0900   %%%%% n°  74      01  ETU   KKKK072   MACIONI                REGIS                  0000000000 620914   TEF   0875   %%%%% n°  75      01   DIR   KKKK073 JEFROY                 LEONCE                 0000000000   640208   OS1 1285   %%%%% n°  76      01   ETU   KKKK074   DUONSSOU PROSPER                0000000000   640914   TEF   1325   %%%%% n°  77 01   DIR   KKKK075   CHTRUMPF               ROGER                  0000000000 640208   OS1   1400   %%%%% n°  78      01   ETU   KKKK076   MULER-DUNC             YOLANDE 0000000000   700914   TEF   1725   %%%%% n°  79      01   DIR   KKKK077 ROUSSI                 EMILE                  0000000000   700208   OS1 1800   %%%%% n°  80      01   ETU   KKKK092   BURNEL                 JEAN                   0000000000 750914   IEF   1625   %%%%% n°  81      01   ATE   KKKK093 BURNICHOU              JACQUES                0000000000   540208   IPE 1660   %%%%% n°  82      01   ETU   KKKK094   BURNICHOU JACQUES                0000000000   530914   IEF   1685   %%%%% n°  83 01   ATE   KKKK095   ETILIC                 CHRISTOPHE             0000000000 520208   IPE   1200   %%%%% n°  84      01   ETU   KKKK096 VENEU                  JOSIANE                0000000000   520914   IEF 1425   %%%%% n°  85      01   ATE   KKKK097   LE PODEC ERIC                   0000000000   530208   IPE   1600   %%%%% n°  86 01   ETU   KKKK098   LE GRALOU              HERVE                  0000000000 520914   OS1   1825   %%%%% n°  87      01   ATE   KKKK099 GOLOGOLO               FALILOU                0000000000   630208   IPE 1500   %%%%% n°  88      01   ETU   KKKK100   GAROU JEAN-LOUP              0000000000   630914   OS1   1425   %%%%% n°  89      01 ATE   KKKK101   CABANOU                DIANE                  0000000000 630208   IPE   0900   %%%%% n°  90      01   ETU   KKKK102 PICHON                 MARCEL                 0000000000   600914   OS1 0925   %%%%% n°  91      01   ETU   KKKK078   GIRADOU JEAN                   0000000000   680914   IEF   1925   %%%%% n°  92 01   DIR   KKKK079   PETITFOU               JACQUES                0000000000 690208   OS1   1700   %%%%% n°  93      01   ETU   KKKK080   GRANDFOU PIERRE                 0000000000   690914   IEF   1725   %%%%% n°  94 01   DIR   KKKK081   FOSSAY                 ALONZO                 0000000000 440208   IPE   1600   %%%%% n°  95      01   ETU   KKKK082 VACHARD                PAUL                   0000000000   420914   OS1 1425   %%%%% n°  96      01   DIR   KKKK083   CLEATOUR JACK                   0000000000   740208   IPE   1450   %%%%% n°  97 01   ETU   KKKK084   GRIMONCHAMP            THIBAUT                0000000000 720914   OS1   1628   %%%%% n°  98      01   DIR   KKKK085 RAVARY                 JUDITH                 0000000000   550208   IPE 1270   %%%%% n°  99      01   ETU   KKKK086   MICHOUNET JEANNE                 0000000000   420914   TEF   1671   %%%%% n° 100 01   ATE   KKKK087   PAGEOT                 SOLANGE                0000000000 440208   IPE   1278   %%%%% n° 101      01   ETU   KKKK088 BOLLERAS               PHILIPPE               0000000000   420914   OS1 1452   %%%%% n° 102      01   ATE   KKKK089   MAQUERIN DENISE                 0000000000   440208   IPE   1400   %%%%% n° 103 01   ETU   KKKK090   CHAVEL                 HONORE                 0000000000 750914   TEF   1825   %%%%% n° 104      01   ATE   KKKK091 VOUBI-LAPLAC           VICTOR                 0000000000   750208   IPE 1600   %%%%% n° 105      01   ETU   KKKK112   SANCHEZ JUAN                   0000000000   530914   IEF   1333   %%%%% n° 106      01  DIR   KKKK113   AVECCHEZ               POLO                   0000000000 530208   OS1   1400   %%%%% n° 107      01   ETU   KKKK114 BOUGNOL                ACHILLE                0000000000   530914   IEF 1445   %%%%% n° 108      01   DIR   KKKK115   LONBOUT JACQUES                0000000000   530208   OS1   1144   %%%%% n° 109 01   ETU   KKKK116   BARGEAU                NICOLAS                0000000000 530914   IEF   1445   %%%%% n° 110      01   DIR   KKKK117   BARGEOT-PINAC          PIERRE 0000000000   550208   OS1   1289   %%%%% n° 111      01   ETU   KKKK118 LAMOUREUX              JEAN-PIERRE            0000000000   550914   IEF 1626   %%%%% n° 112      01   DIR   KKKK119   GEFRO                  MARIE-ANNICK 0000000000   565208   IPE   1206   %%%%% n° 113      01   ETU   KKKK120 BOUCEROT               JEAN                   0000000000   520914   IEF 1623   %%%%% n° 114      01   DIR   KKKK121   PORCINET MARCEL                 0000000000   440208   OS1   1201   %%%%% n° 115 01   ETU   KKKK122   PIANOTTI               BLAISE                 0000000000 420914   IEF   1625   %%%%% n° 116      01   DIR   KKKK123 CHAKI                  REMI                   0000000000   440208   IPE 1207   %%%%% n° 117      01   ATE   KKKK103   NICOCHIOU BERTILLE               0000000000   600208   IPE   0900   %%%%% n° 118 01   ETU   KKKK104   PELE                   BOLOU-BOULOU           0000000000 600914   OS1   0625   %%%%% n° 119      01   ATE   KKKK105 N'ZEZE                 JEAN-CHARLES           0000000000   640208   IPE 1100   %%%%% n° 120      01   ETU   KKKK106   ZYVYTCH IGOR                   0000000000   640914   OS1   1196   %%%%% n° 121      01 ATE   KKKK107   STOKOVIC               ROLAND                 0000000000 560208   IPE   1125   %%%%% n° 122      01   ETU   KKKK108 MARCELLO               CONSTANTIN             0000000000   560914   OS1 1198   %%%%% n° 123      01   ATE   KKKK109   DE LA PENA BLANDINE               0000000000   560208   IPE   1147   %%%%% n° 124 01   ETU   KKKK110   DA RODRIGO             JUAN                   0000000000 520914   IEF   1111   %%%%% n° 125      01   ATE   KKKK111   GONZALEZ JUAN                   0000000000   530208   OS1   1222   %%%%% n° 126 01   ETU   KKKK124   BARBOUZON              MATHILDE               0000000000 420914   OS1   1627   %%%%% n° 127      01   DIR   KKKK125 LABOURNY               ISABELLE               0000000000   440208   OS1 1208   %%%%% n° 128      01   ETU   KKKK126   DA RIVIERA JUAN                   0000000000   630914   OS1   1628   %%%%% n° 129 01   DIR   KKKK127   DA LACANTINA           JUAN                   0000000000 560208   IPE   1209   %%%%% n° 158      01   ATE   KKKK021 PIROUX                 ALEX                   0000000000   630208   OS1 1650   %%%%% n° 159      01   ETU   KKKK022   TASSAROTI GERARD                 0000000000   630914   IEF   1750   %%%%% n° 160 01   ATE   KKKK023   PERETTI                JUSTINE                0000000000 550208   TEF   1850   %%%%% n° 161      01   ETU   KKKK024 PASQUI                 JOSEPH                 0000000000   550914   IEF 1650   %%%%% n° 162      01   ATE   KKKK025   RACCHI CLEMENCE               0000000000   530208   TEF   1550   %%%%% n° 163 02   ETU   KKKK026   DUFER                  CASIMIR                0000000000 420914   IEF   1550   %%%%% n° 164      02   ATE   KKKK027 RASQUATTE              MARC                   0000000000   440208   IPE 1725   %%%%% n° 165      02   ETU   KKKK032   MACARONETTINI LEON                   0000000000   690914   TEF   1350   %%%%% n° 166      02  ATE   KKKK033   LECHAFON               MARINE                 0000000000 820208   OS1   1350   %%%%% n° 167      01   ATE   KKKK167 XEFINI                 XAVIER                 0000000000   740208   IPE 1700   %%%%%  Cas avec les option “  USING  ” et “  GIVING   ”

D11  résultat souhaité

On veut simplement avoir ce (même) fichier trié en ordre croissant sur n° usine puis pour une usine , on veut que les articles soient rangés par service et pour un service d’une usine , on veut les personnels en ordre alphabétique.

D12  programme cobol

IDENTIFICATION DIVISION.

                   

E

SAT-D

I   [LRE]

 

CHAPÎTRE 10  :    Le

tri , la fusi

on des f

ichie

rs-

 

       page 10-13

C

ours

CBL-85

   
       

         11/10/2009  -

11/10/2009

n

° 130

     01 

 ETU   KKKK128   CRUCH

ON                VIVIE

N           

     0000

000000

560

914   OS1   1626   %%%%%

n

° 131

     01 

 DIR   KKKK129   WAGNE

RE                BEATR

ICE         

     0000

000000

580

208   OS1   1203   %%%%%

n

° 132

     02 

 ETU   KKKK130   LE CH

AUVE              STANI

SLAS        

     0000

000000

580

914   OS1   1622   %%%%%

n

° 133

     02 

 DIR   KKKK131   LE CH

AUVE              IRENE

     0000

000000

580

208   IPE   1202   %%%%%

n

° 134

     01 

 ETU   KKKK152   VALBO

UC                PIERR

E           

     0000

000000

590

914   OS1   1725   %%%%%

n

° 135

     01 

 DIR   KKKK153   TIFFA

RT                CONST

ANT         

     0000

000000

590

208   OS1   1725   %%%%%

n

° 136

     01 

 ETU   KKKK154   FRIDA

SSOU              RENAU

D           

     0000

000000

580

914   OS1   1627   %%%%%

n

° 137

     01 

 ATE   KKKK155   HERNE

STO               NADEG

E           

     0000

000000

580

208   OS1   1700   %%%%%

n

° 138

     01 

 ETU   KKKK156   JAMBA

LER               ANNIC

K           

     0000

000000

580

914   OS1   1825   %%%%%

n

° 139

     01 

 ATE   KKKK157   JAMBO

N-DUPAYS          PAULE

     0000

000000

750

208   OS1   1812   %%%%%

n

° 140

     01 

 ETU   KKKK158   SADUR

                  ISABE

LLE         

     0000

000000

750

914   IEF   1628   %%%%%

n

° 141

     01 

 ATE   KKKK159   BLANC

HOT               JACQU

ES          

     0000

000000

740

208   OS1   1825   %%%%%

n

° 142

     01 

 ETU   KKKK160   PIROU

ETTI              MAXIM

E           

     0000

000000

740

914   IEF   1863   %%%%%

n

° 143

     01 

 ATE   KKKK161   CESAR

INNI              RICHA

RD          

     0000

000000

710

208   OS1   1269   %%%%%

n

° 144

     01 

 ETU   KKKK162   DARTI

GNAC              GASTO

N           

     0000

000000

710

914   IEF   1635   %%%%%

n

° 145

     01 

 ATE   KKKK163   DORRY

                  JULIE

     0000

000000

750

208   IPE   1800   %%%%%

n

° 146

     01 

 ETU   KKKK164   FRIPO

UX                JEAN

     0000

000000

780

914   IEF   1854   %%%%%

n

° 147

     01 

 ATE   KKKK165   RIPOU

NET               MARCE

L           

     0000

000000

790

208   IPE   1801   %%%%%

n

° 148

     01 

 ETU   KKKK166   ZAPIN

E                 SANDR

INE         

     0000

000000

740

914   IEF   1825   %%%%%

n

° 149

     02 

 ETU   KKKK054   BOBAR

D                 JEAN

     0000

000000

560

914   TEF   1225   %%%%%

n

° 150

     02 

 DIR   KKKK055   FITRO

CHON              GISEL

E           

     0000

000000

560

208   IPE   1641   %%%%%

n

° 151

     02 

 ETU   KKKK056   FITRO

CHON              BENOI

T           

     0000

000000

560

914   OS1   1642   %%%%%

n

° 152

     02 

 DIR   KKKK057   MOMEA

U                 FERNA

ND          

     0000

000000

690

208   IPE   1160   %%%%%

n

° 153

     01 

 DIR   KKKK009   CHABO

UGNARD            YVETT

E           

     0000

000000

550

208   TEF   1700   %%%%%

n

° 154

     01 

 ETU   KKKK010   CRIGN

OT                JEAN

     0000

000000

550

914   IEF   1300   %%%%%

n

° 155

     02 

 ETU   KKKK018   N'GOR

E                 JEAN

     0000

000000

560

914   TEF   1650   %%%%%

n

° 156

     02 

 ATE   KKKK019   ALABO

UF                NESTO

R           

     0000

000000

570

208   OS1   1250   %%%%%

n

° 157

     01 

 ETU   KKKK020   RAMED

                  BEN 

     0000

000000

630

914   OS1   1450   %%%%%

D1

       PROGRAM-ID. usigivi.        ENVIRONMENT DIVISION.        configuration section.        input-output section.

file-control.

    select ftri       assign to disk.

    select femploye   assign to "c:\gestion\".

       data division.        file section.        sd ftri.        1 tenreg.

  3 tusine    pic xx.

  3 tservice  pic xxx.

  3           pic x(7).

  3 tnom      pic x(20).

  3 tprenom   pic x(20).

  3           pic x(28).

       fd femploye.        1 enreg       pic x(80).        WORKING-STORAGE SECTION.

procedure division.        tri section.

       debut.

   sort ftri on ascending  key tusine      on descending key tservice      on ascending  key tnom tprenom using  femploye giving femploye    stop run.

14

  -

D13  résultat obtenu (extrait )

n°   1      01 ETU   KKKK124   BARBOUZON              MATHILDE               0000000000 420914   OS1   1627   %%%%% n°   2      01   ETU   KKKK116 BARGEAU                NICOLAS                0000000000   530914   IEF 1445   %%%%% n°   3      01   ETU   KKKK150   BOLE-CASOU EDMOND                 0000000000   690914   OS1   1425   %%%%% n°   4 01   ETU   KKKK088   BOLLERAS               PHILIPPE               0000000000 420914   OS1   1452   %%%%% n°   5      01   ETU   KKKK042   BOUBI DAMIEN                 0000000000   450914   IEF   1723   %%%%%

                .        .        .        .        .        .        .        .        .        .        .

. . . . . . . . . . . n°  59      01 ETU   KKKK096   VENEU                  JOSIANE                0000000000 520914   IEF   1425   %%%%% n°  60      01   ETU   KKKK166 ZAPINE                 SANDRINE               0000000000   740914   IEF 1825   %%%%% n°  61      01   ETU   KKKK106   ZYVYTCH IGOR                   0000000000   640914   OS1   1196   %%%%% n°  62 01   DIR   KKKK113   AVECCHEZ               POLO                   0000000000 530208   OS1   1400   %%%%% n°  63      01   DIR   KKKK117   BARGEOT-PINAC PIERRE                 0000000000   550208   OS1   1289   %%%%% n°  64 01   DIR   KKKK014   BROTIGNAC              URBAIN                 0000000000 680914   TEF   1536   %%%%% n°  65      01   DIR   KKKK151   CATIFLON               JACQUES 0000000000   690208   OS1   1700   %%%%% n°  66      01   DIR   KKKK009 CHABOUGNARD            YVETTE                 0000000000   550208   TEF 1700   %%%%% n°  67      01   DIR   KKKK123   CHAKI                  REMI                   0000000000 440208   IPE   1207   %%%%%

                .        .        .        .        .        .        .        .        .        .        .

. . . . . . . . . . . n°  95      01 DIR   KKKK129   WAGNERE                BEATRICE               0000000000 580208   OS1   1203   %%%%% n°  96      01   DIR   KKKK149   ZWUITYCHYTONNINNI MARCEL                 0000000000   690208   OS1   1400   %%%%% n°  97 01   ATE   KKKK035   AVIRY                  LUC                    0000000000 700208   OS1   1658   %%%%% n°  98      01   ATE   KKKK159   BLANCHOT               JACQUES 0000000000   740208   OS1   1825   %%%%% n°  99      01   ATE   KKKK093 BURNICHOU              JACQUES                0000000000   540208   IPE 1660   %%%%% n° 100      01   ATE   KKKK101   CABANOU                DIANE                  0000000000 630208   IPE   0900   %%%%% n° 101      01   ATE   KKKK161 CESARINNI              RICHARD                0000000000   710208   OS1 1269   %%%%% n° 102      01   ATE   KKKK043   CRAPIGNARD CLAIRE                 0000000000   460208   TEF   1500   %%%%% n° 103 01   ATE   KKKK109   DE LA PENA             BLANDINE               0000000000 560208   IPE   1147   %%%%% n° 104      01   ATE   KKKK163 DORRY                  JULIE                  0000000000   750208   IPE 1800   %%%%%

                .        .        .        .        .        .        .        .        .        .        .

 
 
 

D2

. . . . . . . . . . . n° 125      01 ATE   KKKK091   VOUBI-LAPLAC           VICTOR                 0000000000 750208   IPE   1600   %%%%% n° 126      01   ATE   KKKK167 XEFINI                 XAVIER                 0000000000   740208   IPE 1700   %%%%% n° 127      02   ETU   KKKK054   BOBARD JEAN                   0000000000   560914   TEF   1225   %%%%% n° 128 02   ETU   KKKK132   BOVEAU                 JEAN                   0000000000 590914   OS1   1622   %%%%% n° 129      02   ETU   KKKK028   CARMICON JEAN                   0000000000   420914   TEF   1725   %%%%% n° 130 02   ETU   KKKK030   CASBONBINI             MARCEL                 0000000000 620914   TEF   1236   %%%%% n° 131      02   ETU   KKKK050   CHIALOUX               FLORENCE 0000000000   410914   TEF   1725   %%%%% n° 132      02   ETU   KKKK060 CHIASSOUX-BERNARD      ANTHONY                0000000000   520914   OS1 1825   %%%%%

                .        .        .        .        .        .        .        .        .        .        .

. . . . . . . . . . . n° 133      02   ETU KKKK140   DESSALON               OLIVIA                 0000000000   510914 IEF   1625   %%%%% n° 134      02   ETU   KKKK026   DUFER CASIMIR                0000000000   420914   IEF   1550   %%%%% n° 135 02   ETU   KKKK056   FITROCHON              BENOIT                 0000000000 560914   OS1   1642   %%%%% n° 136      02   ETU   KKKK005 FOUMI                  PIERRE                 0000000000   400813   OS1 1700   %%%%% n° 137      02   ETU   KKKK034   LABAF                  JEAN 0000000000   700914   TEF   1625   %%%%%

                .        .        .        .        .        .        .        .        .        .        .

                .        .        .        .        .        .        .        .        .        .        .

n° 165      02 ATE   KKKK029   PETOUNET               MARC                   0000000000 520208   IPE   1225   %%%%% n° 166      02   ATE   KKKK031 RALATOUF               ETIENNE                0000000000   690208   OS1 1350   %%%%% n° 167      02   ATE   KKKK027   RASQUATTE MARC                   0000000000   440208   IPE   1725   %%%%%

 Cas avec les option “  USING  ” et “  OUTPUT PROCEDURE   ”

D21  résultat souhaité

A partir du fichier initial (c:\gestion\ :  non trié ) , on veut éditer sur un état imprimé le classement des personnels (établi grâce à la zone note) par usine.

Pour ceux qui auraient la même note , un point (signifiant ex-aequo) sera écrit à la place du classement. On effectuera un saut de page par usine En fin de chaque usine on affichera la moyenne générale des personnels.

Pour réaliser cette application, il faut un tri direct du fichier fourni en entrée (USING) puis écrire un programme de sortie (OUTPUT PROCEDURE ) dont le pseudo-code est à écrire avec pour données en entrée , le fichier tri trié. [ cf schéma page suivante ]

[temps accordé pour réaliser cet exercice (écriture du pseudo-code et du programme ) : 1 H ]


15

  -

 

D22  programme cobol

IDENTIFICATION DIVISION.

       PROGRAM-ID. usioutpu.        ENVIRONMENT DIVISION.        input-output section.

file-control.

select ftri       assign to disk.     select femploye   assign to "c:\gestion\".     select fimpri     assign to "c:\gestion\".

data division.        file section.        sd ftri.        1 tenreg.

  3 tusine   pic xx.

  3          pic x(10).

  3 tnom     pic x(20).

  3 tprenom  pic x(20).

  3          pic x(19).

  3 tnote    pic 99v99.

3         pic xxxxx.        fd femploye.        1 enreg pic x(80).

16

  -

fd fimpri linage is 66.        1 sligne pic x(60).

WORKING-STORAGE SECTION.

77 wctf pic 9 value 0.   88 ff             value 1.

77 wusi       pic 99.

77 wcumul      pic 9(6)v99.

77 wnb        pic 999.

77 wzm-note    pic 99v99.

       1 wentete.

  3  pic x(10) value spaces.

  3  pic x(20) value "nom".

  3  pic x(12) value "prenom".

  3  pic x(8) value "moyenne".

  3  pic x(10) value "classement".

       1 wligne.

3 wnom       pic x(21).   3 wprenom pic x(21).

                3 wnote     pic zzv,99.

                3           pic xxx.

  3 wclassx.

     5 wclass9 pic zzz.

procedure division.        tri section.

       debut.

sort ftri on descending  key tusine tnote using  femploye

output procedure classement-par-usine

stop run.

classement-par-usine section.

       debut.

open output fimpri   return ftri      at end set ff to true

display "erreur fichier tri vide"

end-return   perform until ff

move "classement pour l'usine n°" to sligne      move tusine to sligne(28:2) wusi      write sligne after page      write sligne from wentete after 4

move space to sligne      write sligne after 2      move 0 to wnb wcumul move 99.99 to wzm-note

perform until wusi not = tusine or ff add 1 to wnb move tnom to wnom move tprenom to wprenom if tnote = wzm-note    then

move "  ." to wclassx    else

move wnb to wclass9 end-if

move tnote to wnote wzm-note write sligne from wligne add tnote to wcumul return ftri    at end       set ff to true

end-return

end-perform      move space to wligne

move "moyenne de l'usine" to  wligne(20:)      divide wcumul by wnb giving wnote      write sligne from wligne

end-perform   close fimpri. 17

  -

D23  résultat obtenu  (extrait )

classement pour l'usine n° 02                              

 nom prenom              moyenne classement

PISSOUNET MARCEL               19,25     1      

CHIASSOUX-BERNARD ANTHONY              18,25     2      

PASTISSE ALPHONSE             18,00     3      

CARMICON JEAN                 17,25     4       CHIALOUX             FLORENCE 17,25     .      

RASQUATTE MARC                 17,25     .      

FOUMI PIERRE               17,00     7      

N'GORE JEAN                 16,50     8      

FITROCHON BENOIT               16,42     9      

FITROCHON GISELE               16,41    10      

PIOLA JEAN                 16,25    11       LABAF JEAN                 16,25     .      

LABROUILLE           ISIDORE 16,25     .      

DESSALON OLIVIA               16,25     .      

ROYER-MOLLOUX VERONIQUE            16,24    15      

                .             .             .      .

                .             .             .      .

                .             .             .      .

EBOUNARD BERTRAND             12,00    38       SOMMIER-DUVALLON MARCELLIN            12,00     .      

MOMEAU FERNAND              11,60    40      

MURINI ANGE                 11,05    41                          moyenne de l'usine     14,81            

classement pour l'usine n° 01                                nom prenom               moyenne classement

EUGRAFAL AMADEUS              19,75     1      

GIRADOU JEAN                 19,25     2      

LAVIANDE DELPHINE             19,02     3      

POPINARD ELODIE               19,00     4      

PIROUETTI MAXIME               18,63     5      

FRIPOUX JEAN                 18,54     6      

PERETTI JUSTINE              18,50     7      

VISQUI DANIEL               18,25     8       CRABALOT CHARLES              18,25     .      

LE GRALOU            HERVE                18,25     .      

CHAVEL HONORE               18,25     .      

JAMBALER ANNICK               18,25     .      

BLANCHOT JACQUES              18,25     .      

ZAPINE SANDRINE             18,25     .      

JAMBON-DUPAYS PAULE                18,12    15      

RIPOUNET MARCEL               18,01    16      

                .             .             .      .

                .             .             .      .

                .             .             .      .

PICHON MARCEL                9,25   120      

QUIRINETTI BRICE                 9,00   121       CABANOU DIANE                 9,00     .      

NICOCHIOU BERTILLE              9,00     .      

MACIONI REGIS                 8,75   124       

NEUROBIO ALAIN                 8,25   125       PELE BOLOU-BOULOU          6,25   126                          moyenne de l'usine     14,74            


D3

 

ESAT-DI   [LRE]

Cours CBL-85

 

              CHAPÎTRE 10  :   

 

18

  -

 Cas avec les option “ INPUT PROCEDURE” et “  OUTPUT PROCEDURE   ”

D31  résultat souhaité

A partir du fichier initial (c:\gestion\ :  non trié ) , on veut obtenir le même état que celui de l’exercice précédent mais uniquement pour les personnes qui sont “ Ingénieur Principal d’Etudes ” (code catégorie = “ IPE ”).

NB : on pourrait n’avoir qu’une output procédure dans laquelle on testerait la catégorie de l’employé mais il est plus performant d’écrire une input procedure pour n’inscrire dans le fichier tri que les personnes concernées.

D32  programme cobol

IDENTIFICATION DIVISION.

       PROGRAM-ID. inpoout.        ENVIRONMENT DIVISION.        input-output section.

file-control.

    select ftri assign to disk.     select femploye   assign to "c:\gestion\".     select fimpri     assign to "c:\gestion\". data division.        file section.        sd ftri. 1 tenreg.

  3 tusine   pic xx.

                3         pic x(10).

  3 tnom     pic x(20).

3 tprenom  pic x(20).   3            pic x(19).

  3 tnote    pic 99v99.

3         pic xxxxx.        fd femploye.        1 enreg.

                3           pic x(68).

                3  ecat     pic xxx.

3    pic x(9).        fd fimpri linage is 66.        1 sligne pic x(60).

WORKING-STORAGE SECTION.

77 wctf pic 9 value 0.   88 ff       value 1.

77 wusi       pic 99.

77 wcumul      pic 9(6)v99.

77 wnb        pic 999.

77 wzm-note    pic 99v99.

       1 wentete.

  3  pic x(10) value spaces.

  3  pic x(20) value "nom".

  3  pic x(12) value "prenom".

  3  pic x(8) value "moyenne".

  3  pic x(10) value "classement".

       1 wligne.

3 wnom       pic x(21).   3 wprenom pic x(21).

                3 wnote     pic zzv,99.

                3           pic xxx.

  3 wclassx.

5 wclass9 pic zzz.        procedure division.

tri section.

       debut.

   sort ftri on descending  key tusine tnote input  procedure selection-ingenieur output procedure classement-par-usine    stop run.

ESAT-DI   [LRE]        19

Cours CBL-85                            CHAPÎTRE 10  :   

                                                                                                                                                                                                                    -

selection-ingenieur section.

       debut.

open input femploye    read femploye       at end  set ff to true

 display "erreur fichier des employés vide"

end-read    perform until ff       if ecat = "IPE" or "ipe"  then

release tenreg from enreg

end-if       read femploye  at end     set ff to true

end-read    end-perform    move 0 to wctf    close femploye.

classement-par-usine section.

       debut.

open output fimpri   return ftri      at end set ff to true

display "erreur fichier tri vide"

end-return   perform until ff

move "classement des ingénieurs pour l'usine n°" to sligne      move tusine to sligne(43:2) wusi      write sligne after page      write sligne from wentete after 4

move space to sligne      write sligne after 2      move 0 to wnb wcumul move 99.99 to wzm-note

perform until wusi not = tusine or ff add 1 to wnb move tnom to wnom move tprenom to wprenom if tnote = wzm-note    then

move "  ." to wclassx    else

move wnb to wclass9 end-if

move tnote to wnote wzm-note write sligne from wligne add tnote to wcumul return ftri    at end       set ff to true

end-return

end-perform      move space to wligne

     move "moyenne des ingénieurs de l'usine" to wligne

divide wcumul by wnb giving wnote      write sligne from wligne

ESAT-DI [LRE]

Cours CBL-85

 

end-perform   close fimpri.                20

              CHAPÎTRE 10  :   

                                                                                                                                                                                                                    -

D33    résultat obtenu (complet)

classement des ingénieurs pour l'usine n° 02               

 nom prénom               moyenne classement

PASTISSE ALPHONSE             18,00     1      

RASQUATTE MARC                 17,25     2      

FITROCHON GISELE               16,41     3      

LABROUILLE ISIDORE              16,25     4      

ZYVANISEVITCHSKY JULES                15,50     5      

CHIASSOU             ZOE 15,00     6      

DE LA CARTOUCHE      JACQUES              13,45     7      

CASANOVIEN ALICE                12,50     8      

PETOUNET MARC                 12,25     9      

LE CHAUVE            IRENE                12,02    10      

EBOUNARD BERTRAND             12,00    11       MOMEAU FERNAND              11,60    12       moyenne des ingénieurs de l'usine         14,35            

classement des ingénieurs pour l'usine n° 01               

 nom prénom               moyenne classement

RIPOUNET MARCEL               18,01     1      

DORRY JULIE                18,00     2      

XEFINI XAVIER               17,00     3      

DRIPUCON PAUL                 16,85     4      

BURNICHOU JACQUES              16,60     5      

LE PODEC             ERIC                 16,00     6       FOSSAY ALONZO               16,00     .      

VOUBI-LAPLAC VICTOR               16,00     .      

DANLEPAN ARNAUD               15,36     9      

GOLOGOLO FALILOU              15,00    10      

CLEATOUR JACK                 14,50    11      

DE LA TRONCHEN ROSINE               14,25    12      

DEJARDIN JACQUES              14,00    13       MAQUERIN DENISE               14,00     .      

GORRIGNAC DENIS                13,00    15       PINUCHE              VALENTIN 13,00     .      

GRADUCOUX JUSTINE              13,00     .      

PAGEOT SOLANGE              12,78    18      

RAVARY JUDITH               12,70    19      

DA LACANTINA         JUAN                 12,09    20      

CHAKI REMI                 12,07    21      

GEFRO MARIE-ANNICK         12,06    22      

LAGAL JACQUES              12,00    23       ETILIC               CHRISTOPHE 12,00     .      

DE LA PENA           BLANDINE             11,47    25      

STOKOVIC ROLAND               11,25    26      

N'ZEZE JEAN-CHARLES         11,00    27      

CABANOU DIANE                 9,00    28      

NICOCHIOU BERTILLE              9,00     .       moyenne des ingénieurs de l'usine         13,72             A partir du fichier initial (c:\gestion\ :  non trié ) , on veut créer le fichier

“ c:\gestion\salaud\lechecul\ ” des personnes qui ont une note > 17 ; de plus on veut

que les données soient classées par usine, par service ,par catégorie , par moyenne décroissante et par ordre alphabétique (pour les personnes qui auraient la même note). le fichier à obtenir doit avoir la structure suivante :

CODECODE

 N° EMPLOYÉSERVICECATÉGORIENOMNOTE

On va donc faire un programme d’entrée pour sélectionner et écrire dans le fichier tri les employés correspondant puis , on rangera directement le fichier tri trié (GIVING) dans le fichier résultat.

D42  programme cobol

IDENTIFICATION DIVISION.

       PROGRAM-ID. inpgivi.        ENVIRONMENT DIVISION.        input-output section.

file-control.

select ftri       assign to disk.     select femploye   assign to "c:\gestion\".     select fayot      assign to "c:\gestion\salaud\lechecul\".

data division.        file section.

       sd ftri. 1 tenreg.

3 tnum       pic x(7).

3 tservice   pic xxx.

 

3 tcategorie pic xxx.

au moment du  GIVING , la zone “ tusi ”

  3 tnom       pic x(20).

  3 tnote      pic 99v99.

  3 tusi       pic 99.

fd femploye.        1 enreg.

                3  eusi     pic 99.

                3  eserv    pic xxx.

                3  enum     pic x(7).

  3  enom pic x(20).   3 pic x(36).

                3  ecat     pic xxx.

  3  enote pic 99v99.   3 pic xxxxx.

sera tronquée

fd fayot.        1 senreg pic x(37).

WORKING-STORAGE SECTION.

       77 wctf         pic 9      value 0.

  88 ff                    value 1.

       77 wnote-limite pic 99v99  value 17.


     on descending key tnote      on ascending  key tnom input  procedure selection-fayot giving fayot

stop run.

selection-fayot section.        debut. open input femploye    read femploye       at end  set ff to true

 display "erreur fichier des employés vide"

end-read    perform until ff       if enote > wnote-limite  then     move enum  to tnum     move eserv to tservice     move enom  to tnom     move ecat to tcategorie     move enote to tnote     move eusi  to tusi     release tenreg

end-if       read femploye  at end     set ff to true

end-read    end-perform.

   

ES

AT-DI   [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-22

Co

urs CBL-85

 
   

         11/10/2009  -

11/10/2009

procedure division.

tri section.

debut.    sort ftri on ascending  key tusi tservice tcategorie

 

D43  vidage du fichier-résultat obtenu

KKKK165ATEIPERIPOUNET 1801

KKKK163ATEIPEDORRY 1800

KKKK041ATEOS1POPINARD 1900

KKKK159ATEOS1BLANCHOT 1825

KKKK039ATEOS1VISQUI 1825

KKKK157ATEOS1JAMBON-DUPAYS 1812

KKKK023ATETEFPERETTI 1850

KKKK047ATETEFLAGALLE 1745

KKKK067DIRINSEUGRAFAL 1975

KKKK077DIROS1ROUSSI 1800

KKKK153DIROS1TIFFART 1725

KKKK078ETUIEFGIRADOU 1925

KKKK160ETUIEFPIROUETTI 1863

KKKK164ETUIEFFRIPOUX 1854

KKKK166ETUIEFZAPINE 1825

KKKK022ETUIEFTASSAROTI 1750

KKKK080ETUIEFGRANDFOU 1725

KKKK042ETUIEFBOUBI 1723

KKKK040ETUOS1LAVIANDE 1902

KKKK156ETUOS1JAMBALER 1825

KKKK098ETUOS1LE GRALOU           1825

KKKK038ETUOS1PERNOD 1756

KKKK152ETUOS1VALBOUC 1725

KKKK090ETUTEFCHAVEL 1825

KKKK066ETUTEFCRABALOT 1825

KKKK076ETUTEFMULER-DUNC 1725

KKKK027ATEIPERASQUATTE 1725

KKKK051DIRIPEPASTISSE 1800

KKKK062ETUOS1PISSOUNET 1925

KKKK060ETUOS1CHIASSOUX-BERNARD 1825

KKKK028ETUTEFCARMICON 1725

KKKK050ETUTEFCHIALOUX 1725

23

  -

Cas avec plusieurs tris

D5

D51  résultat souhaité

A partir du fichier initial (c:\gestion\ :  non trié ) , on veut éditer sur un état imprimé le classement des personnels (établi grâce à la zone note) par usine et par service.

Pour ceux qui auraient la même note , un point (signifiant ex-aequo) sera écrit à la place du classement. On effectuera un saut de page par service En fin de chaque service on affichera la moyenne générale des personnels.

 

ESAT-DI [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-24

Cours CBL-85

 
 

         11/10/2009  -

11/10/2009

pour afficher le clair du service , on utilisera une petite table ( à chargement direct dans le programme par “ value ” ; les articles du fichier des employés pour lesquels on ne trouvera pas le code service dans la table seront inscrits sur un fichier “ anomalies ” (articles  identiques à ceux du fichier des employés) et ne seront pas traités dans le classement.

D52  principe de la solution retenue

La difficulté du problème réside dans le fait que la zone classement sur l’état imprimé contient le nombre de personnes : ==>

il va falloir faire un premier tri pour pouvoir compter toutes les personnes de chaque service (de chaque usine) à l’exception de celles en anomalie (qui auront été écartées à l’aide d’un programme de contrôle constituant une input procedure ).

ensuite , pour réaliser l’édition demandée , il faut pouvoir disposer de ce nombre une fois par service : on va donc se créer un fichier tri avec plusieurs types d’articles différents et une zone “ code-article ” qui aura la structure suivante :

pour chaque service de chaque usine , on aura dans le fichier tri trié utilisé pour éditer le classement :

1 enregistrement “ identification du service ” (code-article = 1) suivi des n enregistrements “ employés ” (code-article = 2)

1  n° usine  code service  clair service                   divers nombre

personnes

2  n° usine  code service  nom                    prénom                   note divers           

NB : pour simplifier , j’ai choisi d’utiliser des articles à longueur fixe ( on aurait pu éviter les zones “ divers ” )

J’ai également décidé d’utiliser , pour traiter toute l’application , un seul et même fichier tri

(on aura donc deux fois “ sort ftri ” au lieu de “ sort ftri1 ” suivi de “ sort ftri2 ”)

D53  programmes cobol détaillé

IDENTIFICATION DIVISION.

       PROGRAM-ID. multitri.        ENVIRONMENT DIVISION.        input-output section.

file-control.

select ftri        assign to disk.     select femploye    assign to "c:\gestion\".     select fanomalie   assign to "c:\gestion\".

select ftemporaire assign to disk.     select fimpri      assign to "c:\gestion\".

data division.        file section.

fd ftemporaire.        1 stemporaire pic x(80).

fd fanomalie.        1 anomalie pic x(80). 25

  -

fd fimpri linage is 66.        1 sligne pic x(80).

sd ftri.        1 tenreg.

  3 tcode-el pic 9.

  3 tid-service.

     5 tusine pic xx.

                5 tservice             pic xxx.

  3 tzone.

5 tnom          pic x(20).      5 tprenom      pic x(20).

  3 tzonebis redefines tzone.

     5 tclair-service pic x(25).

5        pic x(15).   3 tnote             pic 99v99.   3 tnombre pic 999.

fd femploye.        1 enreg.

  3 eid-service pic xxxxx.

                3           pic x(7).

  3 enom-prenom pic x(40).

3    pic x(19).   3 enote       pic 99v99.

                3           pic xxxxx.

WORKING-STORAGE SECTION.

77 wctf pic 9 value 0.   88 ff       value 1.

77 wcumul      pic 9(6)v99.

77 wnb        pic 999.

77 wzm-note    pic 99v99.

1 wtenreg-type1.

  3 wtcode-el pic 9.

  3 wtid-service.

     5 wtusine      pic xx.

     5 wtservice      pic xxx.

  3 wtclair-service    pic x(25).

3          pic x(15).   3 wtnote             pic 99v99.   3 wtnombre      pic 999.

       1 wentete.

  3  pic x(10) value spaces.

  3  pic x(20) value "nom".

  3  pic x(12) value "prenom".

  3  pic x(8) value "moyenne".

  3  pic x(10) value "classement".

       1 wligne.

3 wnom       pic x(21).   3 wprenom pic x(21).

                3 wnote     pic zzv,99.

                3           pic xxx.

  3 wclassx.

5 wclass9 pic zzz.   3 wslash pic x.

                3 wnombre   pic zz9.

       1 wtable-des-services.

                3        pic x(28) value "ETUBureau Etudes".

                3        pic x(28) value "DIRDirection".

                3        pic x(28) value "ATEAtelier".

                3        pic x(280).

3 imax    pic 99 value 3.   3 i    pic 99 value 0.

  3 wtrouve pic 9 value 0.

     88 trouve value 1.

       1 wtab redefines wtable-des-services.

  3 occurs 13.

     5 wcode-service  pic xxx.

     5 wclair-service pic x(25).

                3                 pic x(5).

       tri section.

       debut.

   sort ftri on ascending key tid-service              on descending key tnote input  procedure controle-service output procedure compte-employes

sort ftri on ascending  key tid-service tcode-el      on descending key tnote      on ascending  key tzone using ftemporaire

output procedure classement-par-service

stop run.

controle-service section.

debut.   open input femploye output fanomalie   read femploye      at end set ff to true display "erreur ==> femploye est vide"

end-read   perform until ff      move 0 to i wtrouve

call "cbl_toupper" using enreg(3:3) by value 3      perform until trouve or i >= imax add 1 to i

if enreg(3:3) = wcode-service(i)    then       set trouve to true       move eid-service to tid-service       move enom-prenom to tzone       move enote to tnote       release tenreg  end-if

end-perform      if not trouve  then

     

E

SA

T-DI   [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-26

C

ou

rs CBL-85

 
     

         11/10/2009  -

11/10/2009

procedure division.

 

write anomalie from enreg

end-if      read femploye  at end     set ff to true

end-read   end-perform   move 0 to wctf   close femploye fanomalie.

compte-employes section.        debut. open output ftemporaire   return ftri      at end

set ff to true display "ftri n° 1 est vide"   end-return   perform until ff      move tid-service to wtid-service

     move 1 to i

perform until tservice = wcode-service(i) or i >= imax add 1 to i

     end-perform

move wclair-service(i) to wtclair-service      move 0 to wtnombre wcumul move 1 to wtcode-el

perform until tid-service not = wtid-service or ff add 1 to wtnombre move 2 to tcode-el move zero to tnombre add tnote to wcumul write stemporaire from tenreg return ftri    at end       set ff to true end-return

     end-perform

divide wcumul by wtnombre giving wtnote      write stemporaire from wtenreg-type1

end-perform   move 0 to wctf 27

  -

  close ftemporaire.

classement-par-service section.

       debut.

open output fimpri   return ftri      at end set ff to true

display "erreur fichier tri n° 2  vide"

end-return   perform until ff

move tenreg to wtenreg-type1      move space to sligne wligne      string "usine n° " tusine "     "

"classement des employés du service :   "     tclair-service delimited by size     into sligne

write sligne after page      write sligne from wentete after 4

move space to sligne      write sligne after 2      move 99.99 to wzm-note move "/" to wslash      move tnombre to wnombre      return ftri at end    set ff to true

   display "erreur impossible (??!æv-++¬¼ !!) "

   "service sans employé"

   "changez de programmeur"

end-return      move 0 to wnb

perform until tid-service not = wtid-service or ff add 1 to wnb move tnom to wnom move tprenom to wprenom if tnote = wzm-note

then

move "  ." to wclassx

else

move wnb to wclass9

end-if

move tnote to wnote wzm-note write sligne from wligne return ftri    at end set ff to true

end-return

end-perform      move space to wligne

     move "moyenne du service" to wligne(20:)

move wtnote to wnote      write sligne from wligne after 2

end-perform   close fimpri.


28

  -

D54  résultats obtenus

usine n° 01     classement des employés du service :   Atelier                 

 nom                 prénom               moyenne classement

POPINARD ELODIE               19,00     1/ 30                      

PERETTI              JUSTINE 18,50     2/ 30                      

BLANCHOT JACQUES              18,25     3/ 30                      

VISQUI DANIEL               18,25     ./ 30                      

JAMBON-DUPAYS PAULE                18,12     5/ 30                      

RIPOUNET MARCEL               18,01     6/ 30                      

DORRY JULIE                18,00     7/ 30                      

LAGALLE SABINE               17,45     8/ 30                      

HERNESTO NADEGE               17,00     9/ 30                      

XEFINI XAVIER               17,00     ./ 30                      

BURNICHOU JACQUES              16,60    11/ 30                      

AVIRY LUC                  16,58    12/ 30                      

PIROUX ALEX                 16,50    13/ 30                      

LE PODEC             ERIC                 16,00    14/ 30                       

VOUBI-LAPLAC VICTOR               16,00     ./ 30                      

RACCHI CLEMENCE             15,50    16/ 30                      

RICARD HUGUES               15,46    17/ 30                      

CRAPIGNARD CLAIRE               15,00    18/ 30                      

GOLOGOLO FALILOU              15,00     ./ 30                      

MAQUERIN             DENISE 14,00    20/ 30                      

PAGEOT SOLANGE              12,78    21/ 30                      

CESARINNI RICHARD              12,69    22/ 30                      

GONZALEZ JUAN                 12,22    23/ 30                      

ETILIC CHRISTOPHE           12,00    24/ 30                      

RALATOUF ALBERT               12,00     ./ 30                      

DE LA PENA           BLANDINE             11,47    26/ 30                      

STOKOVIC ROLAND               11,25    27/ 30                      

N'ZEZE JEAN-CHARLES         11,00    28/ 30                      

CABANOU DIANE                 9,00    29/ 30                       NICOCHIOU BERTILLE              9,00     ./ 30 moyenne du service     14,98                                 usine n° 01 classement des employés du service :   Direction                

 nom                 prénom               moyenne classement

EUGRAFAL AMADEUS              19,75     1/ 35                      

ROUSSI EMILE                18,00     2/ 35                      

TIFFART CONSTANT             17,25     3/ 35                      

CATIFLON JACQUES              17,00     4/ 35                      

CHABOUGNARD          YVETTE 17,00     ./ 35                      

PETITFOU JACQUES              17,00     ./ 35                      

DRIPUCON PAUL                 16,85     7/ 35                      

FIRNEROT ANDRE                16,25     8/ 35                      

FOSSAY ALONZO               16,00     9/ 35                      

BROTIGNAC URBAIN               15,36    10/ 35                      

DANLEPAN ARNAUD               15,36     ./ 35                      

CLEATOUR JACK                 14,50    12/ 35                      

DE LA TRONCHEN       ROSINE               14,25    13/ 35                      

AVECCHEZ             POLO 14,00    14/ 35                      

CHTRUMPF ROGER                14,00     ./ 35                      

DEJARDIN JACQUES              14,00     ./ 35                      

PLANI JACQUES              14,00     ./ 35                      

ZWUITYCHYTONNINNI MARCEL               14,00     ./ 35                      

GORRIGNAC DENIS                13,00    19/ 35                      

GRADUCOUX JUSTINE              13,00     ./ 35                      

PINUCHE VALENTIN             13,00     ./ 35                      

BARGEOT-PINAC PIERRE               12,89    22/ 35                      

JEFROY LEONCE               12,85    23/ 35                      

RAVARY JUDITH               12,70    24/ 35                      

GRADUCHON CARINE               12,10    25/ 35                      

DA LACANTINA         JUAN                 12,09    26/ 35                       

LABOURNY ISABELLE             12,08    27/ 35                      

CHAKI REMI                 12,07    28/ 35                      

GEFRO MARIE-ANNICK         12,06    29/ 35                      

WAGNERE BEATRICE             12,03    30/ 35                      

PORCINET MARCEL               12,01    31/ 35                      

LAGAL                JACQUES 12,00    32/ 35                      

LONBOUT JACQUES              11,44    33/ 35                      

NITOUCHE THERESE              10,00    34/ 35                      

29

  -

QUIRINETTI BRICE                 9,00    35/ 35                                          moyenne du service     13,96                                 usine n° 01 classement des employés du service :   Bureau Etudes           

 nom                 prénom               moyenne classement

GIRADOU JEAN                 19,25     1/ 61                      

LAVIANDE DELPHINE             19,02     2/ 61                      

PIROUETTI MAXIME               18,63     3/ 61                      

FRIPOUX JEAN                 18,54     4/ 61                      

CHAVEL HONORE               18,25     5/ 61                      

CRABALOT CHARLES              18,25     ./ 61                      

JAMBALER ANNICK               18,25     ./ 61                      

LE GRALOU            HERVE                18,25     ./ 61                      

ZAPINE SANDRINE             18,25     ./ 61                      

PERNOD CHRISTIAN            17,56    10/ 61                      

TASSAROTI GERARD               17,50    11/ 61                       

GRANDFOU PIERRE               17,25    12/ 61                      

MULER-DUNC YOLANDE              17,25     ./ 61                      

VALBOUC PIERRE               17,25     ./ 61                      

BOUBI DAMIEN               17,23    15/ 61                      

BURNICHOU JACQUES              16,85    16/ 61                      

MICHOUNET JEANNE               16,71    17/ 61                      

PINARDOT             JEAN 16,55    18/ 61                      

PASQUI JOSEPH               16,50    19/ 61                      

DARTIGNAC GASTON               16,35    20/ 61                      

DA RIVIERA           JUAN                 16,28    21/ 61                      

GRIMONCHAMP THIBAUT              16,28     ./ 61                      

SADUR ISABELLE             16,28     ./ 61                      

BARBOUZON MATHILDE             16,27    24/ 61                      

FRIDASSOU RENAUD               16,27     ./ 61                      

CRUCHON VIVIEN               16,26    26/ 61                      

LABAF JEAN                 16,26     ./ 61                      

LAMOUREUX JEAN-PIERRE          16,26     ./ 61                      

BURNEL JEAN                 16,25    29/ 61                      

PIANOTTI             BLAISE 16,25     ./ 61                      

BOUCEROT JEAN                 16,23    31/ 61                      

BRUTASSOU VIVIANE              15,78    32/ 61                      

PINOUFLET JEAN                 15,00    33/ 61                      

BOLLERAS PHILIPPE             14,52    34/ 61                      

RAMED BEN                  14,50    35/ 61                      

BARGEAU NICOLAS              14,45    36/ 61                      

BOUGNOL ACHILLE              14,45     ./ 61                      

PLINDESCENS JEAN-PAUL            14,28    38/ 61                      

BOLE-CASOU EDMOND               14,25    39/ 61                      

CIPROUTO CHARLOTTE            14,25     ./ 61                      

CORNINOULLOT JEAN                 14,25     ./ 61                      

GAROU JEAN-LOUP            14,25     ./ 61                       

LE NAIN              SATURNIN             14,25     ./ 61                      

RALATOUF EDITH                14,25     ./ 61                      

VACHARD PAUL                 14,25     ./ 61                      

VENEU JOSIANE              14,25     ./ 61                      

SANCHEZ JUAN                 13,33    47/ 61                      

DUONSSOU             PROSPER 13,25    48/ 61                      

LABURNE SERGE                13,25     ./ 61                      

PINEUX FIRMIN               13,25     ./ 61                      

SAN ANTONIO          ANTOINE              13,25     ./ 61                      

CRIGNOT JEAN                 13,00    52/ 61                      

LABLONDE GILLES               12,65    53/ 61                      

MARCELLO CONSTANTIN           11,98    54/ 61                      

ZYVYTCH IGOR                 11,96    55/ 61                      

DA RODRIGO           JUAN                 11,11    56/ 61                      

LAPIOL JEANNE               10,25    57/ 61                      

PICHON MARCEL                9,25    58/ 61                      

MACIONI REGIS                 8,75    59/ 61                      

NEUROBIO ALAIN                 8,25    60/ 61                       PELE BOLOU-BOULOU          6,25    61/ 61                                          moyenne du service     15,07                                 usine n° 02 classement des employés du service :   Atelier                 

 nom                 prénom               moyenne classement

RASQUATTE MARC                 17,25     1/  6                      

LECHAFON             MARINE 13,50     2/  6                      

RALATOUF ETIENNE              13,50     ./  6                      

FROGONNO BERTHE               13,00     4/  6                      

ALABOUF NESTOR               12,50     5/  6                      

30

  -

PETOUNET MARC                 12,25     6/  6                      

moyenne du service     13,66                                 usine n° 02     classement des employés du service :   Direction               

 nom                 prénom               moyenne classement

PASTISSE ALPHONSE             18,00     1/ 13                      

FITROCHON GISELE               16,41     2/ 13                      

JACQUOUX JACQUES              15,52     3/ 13                      

PISSOUNET JACQUES              15,50     4/ 13                      

ZYVANISEVITCHSKY JULES                15,50     ./ 13                      

CHIASSOU ZOE                  15,00     6/ 13                      

DE LA CARTOUCHE      JACQUES              13,45     7/ 13                      

CASANOVIEN ALICE                12,50     8/ 13                      

BISTOUKET PIERRE               12,04     9/ 13                      

LE CHAUVE            IRENE                12,02    10/ 13                       

EBOUNARD BERTRAND             12,00    11/ 13                      

SOMMIER-DUVALLON MARCELLIN            12,00     ./ 13                      

MOMEAU FERNAND              11,60    13/ 13                                          moyenne du service     13,96                                 usine n° 02 classement des employés du service :   Bureau Etudes           

 nom                 prénom               moyenne classement

PISSOUNET MARCEL               19,25     1/ 22                      

CHIASSOUX-BERNARD ANTHONY              18,25     2/ 22                      

CARMICON JEAN                 17,25     3/ 22                      

CHIALOUX FLORENCE             17,25     ./ 22                      

FOUMI PIERRE               17,00     5/ 22                      

N'GORE JEAN                 16,50     6/ 22                      

FITROCHON BENOIT               16,42     7/ 22                      

DESSALON OLIVIA               16,25     8/ 22                      

LABAF JEAN                 16,25     ./ 22                      

LABROUILLE ISIDORE              16,25     ./ 22                      

PIOLA JEAN                 16,25     ./ 22                       

ROYER-MOLLOUX VERONIQUE            16,24    12/ 22                      

BOVEAU JEAN                 16,22    13/ 22                      

LE CHAUVE            STANISLAS            16,22     ./ 22                      

DUFER CASIMIR              15,50    15/ 22                      

MULLER AGATHE               15,25    16/ 22                      

RASPITOU JEAN                 14,25    17/ 22                      

ROUPIGNAC THIERRY              14,25     ./ 22                      

MACARONETTINI LEON                 13,50    19/ 22                      

CASBONBINI MARCEL               12,36    20/ 22                      

BOBARD JEAN                 12,25    21/ 22                       MURINI ANGE                 11,05    22/ 22                                          moyenne du service     15,63                                


Cas avec plusieurs fichiers mentionnés dans la clause using

D61  résultat souhaité

A partir de 2 fichiers  (le fichier des employés du bureau études de l’usine n° 2 :

“ c:\gestion\ ” et le fichier des personnels appartenant à la direction de l’usine n° 2 : c:\gestion\ ” ) , on veut créer un seul fichier (c:\gestion\ ) avec les articles classés par odre alphabétique.

 

   JEU d’ESSAI :      

   

ESAT-D

   

HAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-31

I   [LRE]

              C       

Cours CBL-85

 
 

         11/10/2009  -

11/10/2009

D6

n°   1      02 DIR   KKKK133   BISTOUKET              PIERRE                 0000000000 590208   OS1   1204   %%%%% n°   2      02   DIR   KKKK135 CASANOVIEN             ALICE                  0000000000   550208   IPE 1250   %%%%% n°   3      02   DIR   KKKK059   CHIASSOU ZOE                    0000000000   690208   IPE   1500   %%%%% n°   4 02   DIR   KKKK053   DE LA CARTOUCHE        JACQUES                0000000000 500208   IPE   1345   %%%%% n°   5      02   DIR   KKKK061   EBOUNARD BERTRAND               0000000000   510208   IPE   1200   %%%%% n°   6 02   DIR   KKKK055   FITROCHON              GISELE                 0000000000 560208   IPE   1641   %%%%% n°   7      02   DIR   KKKK137   JACQUOUX               JACQUES 0000000000   550208   OS1   1552   %%%%% n°   8      02   DIR   KKKK131   LE CHAUVE              IRENE                  0000000000   580208   IPE   1202 %%%%% n°   9      02   DIR   KKKK057   MOMEAU                 FERNAND                0000000000 690208   IPE   1160   %%%%% n°  10      02   DIR   KKKK051 PASTISSE               ALPHONSE               0000000000   410208   IPE 1800   %%%%% n°  11      02   DIR   KKKK063   PISSOUNET JACQUES                0000000000   530208   OS1   1550   %%%%% n°  12 02   DIR   KKKK139   SOMMIER-DUVALLON       MARCELLIN              0000000000 520208   OS1   1200   %%%%% n°  13      02   DIR   KKKK017 ZYVANISEVITCHSKY       JULES                  0000000000   420208   IPE 1550   %%%%%

n°   1      02 ETU   KKKK054   BOBARD                 JEAN                   0000000000 560914   TEF   1225   %%%%% n°   2      02   ETU   KKKK132 BOVEAU                 JEAN                   0000000000   590914   OS1   1622 %%%%% n°   3      02   ETU   KKKK028   CARMICON JEAN                   0000000000   420914   TEF   1725   %%%%% n°   4 02   ETU   KKKK030   CASBONBINI             MARCEL                 0000000000 620914   TEF   1236   %%%%% n°   5      02   ETU   KKKK050 CHIALOUX               FLORENCE               0000000000   410914   TEF 1725   %%%%% n°   6      02   ETU   KKKK060   CHIASSOUX-BERNARD ANTHONY                0000000000   520914   OS1   1825   %%%%% n°   7 02   ETU   KKKK140   DESSALON               OLIVIA                 0000000000 510914   IEF   1625   %%%%% n°   8      02   ETU   KKKK026 DUFER                  CASIMIR                0000000000   420914   IEF 1550   %%%%% n°   9      02   ETU   KKKK056   FITROCHON BENOIT                 0000000000   560914   OS1   1642   %%%%% n°  10 02   ETU   KKKK005   FOUMI                  PIERRE                 0000000000 400813   OS1   1700   %%%%% n°  11      02   ETU   KKKK034 LABAF                  JEAN                   0000000000   700914   TEF 1625   %%%%% n°  12      02   ETU   KKKK138   LABROUILLE ISIDORE                0000000000   550914   IPE   1625   %%%%% n°  13 02   ETU   KKKK130   LE CHAUVE              STANISLAS              0000000000 580914   OS1   1622   %%%%% n°  14      02   ETU   KKKK032 MACARONETTINI          LEON                   0000000000   690914   TEF 1350   %%%%% n°  15      02   ETU   KKKK136   MULLER AGATHE                 0000000000   550914   IEF   1525   %%%%% n°  16 02   ETU   KKKK058   MURINI                 ANGE                   0000000000 690914   OS1   1105   %%%%% n°  17      02   ETU   KKKK018 N'GORE                 JEAN                   0000000000   560914   TEF 1650   %%%%% n°  18      02   ETU   KKKK002   PIOLA JEAN                   0000000000   420914   TEF   1625   %%%%% n°  19 02   ETU   KKKK062   PISSOUNET              MARCEL                 0000000000 540914   OS1   1925   %%%%% n°  20      02   ETU   KKKK016 RASPITOU               JEAN                   0000000000   450914   TEF 1425   %%%%% n°  21      02   ETU   KKKK052   ROUPIGNAC THIERRY                0000000000   500914   TEF   1425   %%%%% n°  22      02   ETU KKKK134   ROYER-MOLLOUX          VERONIQUE              0000000000   550914 IEF   1624   %%%%%

IDENTIFICATION DIVISION.

       PROGRAM-ID. multusin.        ENVIRONMENT DIVISION.        configuration section.        input-output section.        file-control.

select ftri

assign to disk.

select fetu02

assign to "c:\gestion\".

select fdir02

assign to "c:\gestion\".

select fbilan

assign to "c:\gestion\".

data division.        file section.        sd ftri.        1 senreg.

  3 tusine   pic xx.

  3 tservice pic xxx.

                3         pic x(7).

  3 tnom     pic x(20).

  3 tprenom  pic x(20).

3         pic x(28).        fd fetu02.        1 enretu pic x(80).

fd fdir02.        1 enrdir pic x(80).

fd fbilan.        1 bilan pic x(80).

WORKING-STORAGE SECTION. procedure division.

tri section.        debut.

   sort ftri on ascending  key tnom tprenom using  fetu02 fdir02 giving fbilan

stop run.

D63  résultat obtenu

n°   1      02 DIR   KKKK133   BISTOUKET              PIERRE                 0000000000 590208   OS1   1204   %%%%% n°   2      02   ETU   KKKK054 BOBARD                 JEAN                   0000000000   560914   TEF 1225   %%%%% n°   3      02   ETU   KKKK132   BOVEAU JEAN                   0000000000   590914   OS1   1622   %%%%% n°   4 02   ETU   KKKK028   CARMICON               JEAN                   0000000000 420914   TEF   1725   %%%%% n°   5      02   DIR   KKKK135 CASANOVIEN             ALICE                  0000000000   550208   IPE 1250   %%%%% n°   6      02   ETU   KKKK030   CASBONBINI MARCEL                 0000000000   620914   TEF   1236   %%%%% n°   7 02   ETU   KKKK050   CHIALOUX               FLORENCE               0000000000 410914   TEF   1725   %%%%% n°   8      02   DIR   KKKK059 CHIASSOU               ZOE                    0000000000   690208   IPE 1500   %%%%% n°   9      02   ETU   KKKK060   CHIASSOUX-BERNARD ANTHONY                0000000000   520914   OS1   1825   %%%%% n°  10 02   DIR   KKKK053   DE LA CARTOUCHE        JACQUES                0000000000 500208   IPE   1345   %%%%% n°  11      02   ETU   KKKK140 DESSALON               OLIVIA                 0000000000   510914   IEF 1625   %%%%% n°  12      02   ETU   KKKK026   DUFER CASIMIR                0000000000   420914   IEF   1550   %%%%% n°  13 02   DIR   KKKK061   EBOUNARD               BERTRAND               0000000000 510208   IPE   1200   %%%%% n°  14      02   ETU   KKKK056 FITROCHON              BENOIT                 0000000000   560914   OS1 1642   %%%%% n°  15      02   DIR   KKKK055   FITROCHON GISELE                 0000000000   560208   IPE   1641   %%%%% n°  16 02   ETU   KKKK005   FOUMI                  PIERRE                 0000000000 400813   OS1   1700   %%%%% n°  17      02   DIR   KKKK137 JACQUOUX               JACQUES                0000000000   550208   OS1   1552 %%%%% n°  18      02   ETU   KKKK034   LABAF JEAN                   0000000000   700914   TEF   1625   %%%%% n°  19 02   ETU   KKKK138   LABROUILLE             ISIDORE                0000000000 550914   IPE   1625   %%%%% n°  20      02   DIR   KKKK131   LE CHAUVE              IRENE                  0000000000   580208   IPE   1202 %%%%% n°  21      02   ETU   KKKK130   LE CHAUVE STANISLAS              0000000000   580914   OS1   1622   %%%%% n°  22 02   ETU   KKKK032   MACARONETTINI          LEON                   0000000000 690914   TEF   1350   %%%%% n°  23      02   DIR   KKKK057 MOMEAU                 FERNAND                0000000000   690208   IPE 1160   %%%%% n°  24      02   ETU   KKKK136   MULLER AGATHE                 0000000000   550914   IEF   1525   %%%%% n°  25 02   ETU   KKKK058   MURINI                 ANGE                   0000000000 690914   OS1   1105   %%%%% n°  26      02   ETU   KKKK018 N'GORE                 JEAN                   0000000000   560914   TEF 1650   %%%%% n°  27      02   DIR   KKKK051   PASTISSE ALPHONSE               0000000000   410208   IPE   1800   %%%%% n°  28 02   ETU   KKKK002   PIOLA                  JEAN                   0000000000 420914   TEF   1625   %%%%% n°  29      02   DIR   KKKK063 PISSOUNET              JACQUES                0000000000   530208   OS1 1550   %%%%% n°  30      02   ETU   KKKK062   PISSOUNET MARCEL                 0000000000   540914   OS1   1925   %%%%% n°  31 02   ETU   KKKK016   RASPITOU               JEAN                   0000000000 450914   TEF   1425   %%%%% n°  32      02   ETU   KKKK052 ROUPIGNAC              THIERRY                0000000000   500914   TEF 1425   %%%%% n°  33      02   ETU   KKKK134   ROYER-MOLLOUX VERONIQUE              0000000000   550914   IEF   1624   %%%%% n°  34 02   DIR   KKKK139   SOMMIER-DUVALLON       MARCELLIN              0000000000 520208   OS1   1200   %%%%% n°  35      02   DIR   KKKK017 ZYVANISEVITCHSKY       JULES                  0000000000   420208   IPE 1550   %%%%%

D64     cas particulier

Derrière USING , on peut mettre des noms de fichiers totalement indépendants non structurés de la même manière : par exemple , par rapport au cas précedent , on a rajouté dans la liste USING un troisième fichier dont la taille d’enregistrement est de 34 c (au lieu de 80 pour les autres) dont le contenu et le suivant :

n° 1      01dir------- direction       %%%%%     n°   2      01etu------- bureau    études%%%%%     n°   3      02dir------- direction       %%%%% n°   4      02etu------- bureau    études%%%%%     n°   5      01ate------- atelier-général %%%%%     n°   6      02ate------- atelier général %%%%%      D641     programme cobol

IDENTIFICATION DIVISION.

       PROGRAM-ID. multusin.        ENVIRONMENT DIVISION.        configuration section.        input-output section.        file-control.

select ftri

assign to disk.

select fetu02

assign to "c:\gestion\".

select fdir02

assign to "c:\gestion\".

select ftable

assign to "c:\gestion\".

select fbilan

assign to "c:\laf\cobol\docu\".

data division.        file section.        sd ftri.        1 senreg.

  3 tid-service pic x(5).

 

   JEU d’ESSAI :      

   

ESAT-D

   

HAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-33

I   [LRE]

              C       

Cours CBL-85

 
 

         11/10/2009  -

11/10/2009

                3           pic x(7).

3 tnom       pic x(20).   3 tprenom pic x(20).

3    pic x(28).        fd ftable.        1 etable pic x(34).

fd fetu02.        1 enretu pic x(80).

fd fdir02.        1 enrdir pic x(80).

       fd fbilan.        1 bilan pic x(80).        procedure division.        tri section.

       debut.

sort ftri on ascending  key tid-service tnom tprenom using  fetu02 fdir02 ftable

giving fbilan

   stop run.

 D641 résultat obtenu

n°   1      01 ate   -------    atelier-général %%% %%                                                              n°   2 01   dir   -------    direction       %%% %%                                                              n°   3      01  etu   -------    bureau    études%%% %%                                                              n°   4 02   DIR   KKKK133   BISTOUKET              PIERRE                 0000000000 590208   OS1   1204   %%%%% n°   5      02   DIR   KKKK135   CASANOVIEN ALICE                  0000000000   550208   IPE   1250   %%%%% n°   6 02   DIR   KKKK059   CHIASSOU               ZOE                    0000000000 690208   IPE   1500   %%%%% n°   7      02   DIR   KKKK053   DE LA CARTOUCHE JACQUES                0000000000   500208   IPE   1345   %%%%% n°   8 02   DIR   KKKK061   EBOUNARD               BERTRAND               0000000000 510208   IPE   1200   %%%%% n°   9      02   DIR   KKKK055 FITROCHON              GISELE                 0000000000   560208   IPE 1641   %%%%% n°  10      02   DIR   KKKK137   JACQUOUX JACQUES                0000000000   550208   OS1   1552   %%%%% n°  11 02   DIR   KKKK131   LE CHAUVE              IRENE                  0000000000 580208   IPE   1202   %%%%% n°  12      02   DIR   KKKK057 MOMEAU                 FERNAND                0000000000   690208   IPE 1160   %%%%% n°  13      02   DIR   KKKK051   PASTISSE ALPHONSE               0000000000   410208   IPE   1800   %%%%% n°  14 02   DIR   KKKK063   PISSOUNET              JACQUES                0000000000 530208   OS1   1550   %%%%% n°  15      02   DIR   KKKK139 SOMMIER-DUVALLON       MARCELLIN              0000000000   520208   OS1   1200   %%%%% n°  16      02   DIR   KKKK017   ZYVANISEVITCHSKY       JULES 0000000000   420208   IPE   1550   %%%%% n°  17      02   ETU   KKKK054 BOBARD                 JEAN                   0000000000   560914   TEF 1225   %%%%% n°  18      02   ETU   KKKK132   BOVEAU JEAN                   0000000000   590914   OS1   1622   %%%%% n°  19 02   ETU   KKKK028   CARMICON               JEAN                   0000000000 420914   TEF   1725   %%%%% n°  20      02   ETU   KKKK030 CASBONBINI             MARCEL                 0000000000   620914   TEF 1236   %%%%% n°  21      02   ETU   KKKK050   CHIALOUX FLORENCE               0000000000   410914   TEF   1725   %%%%% n°  22 02   ETU   KKKK060   CHIASSOUX-BERNARD      ANTHONY                0000000000 520914   OS1   1825   %%%%% n°  23      02   ETU   KKKK140 DESSALON               OLIVIA                 0000000000   510914   IEF 1625   %%%%% n°  24      02   ETU   KKKK026   DUFER                  CASIMIR 0000000000   420914   IEF   1550   %%%%% n°  25      02   ETU   KKKK056 FITROCHON              BENOIT                 0000000000   560914   OS1 1642   %%%%% n°  26      02   ETU   KKKK005   FOUMI PIERRE                 0000000000   400813   OS1   1700   %%%%% n°  27 02   ETU   KKKK034   LABAF                  JEAN                   0000000000 700914   TEF   1625   %%%%% n°  28      02   ETU   KKKK138 LABROUILLE             ISIDORE                0000000000   550914   IPE 1625   %%%%% n°  29      02   ETU   KKKK130   LE CHAUVE STANISLAS              0000000000   580914   OS1   1622   %%%%% n°  30 02   ETU   KKKK032   MACARONETTINI          LEON                   0000000000 690914   TEF   1350   %%%%% n°  31      02   ETU   KKKK136 MULLER                 AGATHE                 0000000000   550914   IEF 1525   %%%%% n°  32      02   ETU   KKKK058   MURINI ANGE                   0000000000   690914   OS1   1105   %%%%% n°  33 02   ETU   KKKK018   N'GORE                 JEAN                   0000000000 560914   TEF   1650   %%%%% n°  34      02   ETU   KKKK002 PIOLA                  JEAN                   0000000000   420914   TEF 1625   %%%%% n°  35      02   ETU   KKKK062   PISSOUNET MARCEL                 0000000000   540914   OS1   1925   %%%%% n°  36 02   ETU   KKKK016   RASPITOU               JEAN                   0000000000 450914   TEF   1425   %%%%% n°  37      02   ETU   KKKK052   ROUPIGNAC THIERRY                0000000000   500914   TEF   1425   %%%%% n°  38 02   ETU   KKKK134   ROYER-MOLLOUX          VERONIQUE              0000000000 550914   IEF   1624   %%%%% n°  39      02   ate   -------    atelier général %%%   %%                                                              n° 40      02   dir   -------    direction       %%% %%                                                              n°  41 02   etu   -------    bureau    études%%%   %%                                                              Cas de création d’un fichier séquentiel-indexé avec l’option GIVING

D71  résultat souhaité

A partir du fichier initial (c:\gestion\ :  non trié ) , on veut créer le même fichier mais en organisation séquentielle indexée avec pour clé primaire , le n° de l’employé.

D72  programme cobol

IDENTIFICATION DIVISION.

       

D7

     
 

ESAT-DI   [LRE]

              CHAPÎ

TRE 10  :    Le tri , la fusion des fichiers-

       page 10-34

 
   

Cours CBL-85

   
 

         11/10/2009  -

11/10/2009

 
     

       PROGRAM-ID. givindex.        ENVIRONMENT DIVISION.        configuration section.        input-output section.

file-control.

select ftri       assign to disk.     select femploye   assign to "c:\laf\cobol\docu\".

    select fpersonnel assign to "c:\laf\cobol\docu\indexe"    organization indexed access mode sequential    record    key        pnum

alternate record key pnom   with duplicates    alternate record key pservice with duplicates    alternate record key pcategorie with duplicates.

data division.        file section.        fd fpersonnel.        1 personnel.

  3 pusine     pic xx.

  3 pservice   pic xxx.

  3 pnum pic x(7).

  3 pnom       pic x(20).

  3 pprenom    pic x(20).

                3           pic x(16).

  3 pcategorie pic xxx.

3           pic x(9).        sd ftri.        1 senreg.

                3         pic x(5).

  3 tnum     pic x(7).

3         pic x(68).        fd femploye.        1 enreg pic x(80).

WORKING-STORAGE SECTION.

procedure division.        tri section.

       debut.

   sort ftri on ascending  key tnum using  femploye giving fpersonnel

   stop run.

    select fvidage    assign to "c:\laf\cobol\docu\".

    select fpersonnel assign to "c:\laf\cobol\docu\indexe"    organization indexed access mode dynamic    record    key        pnum

alternate record key pnom   with duplicates    alternate record key pservice with duplicates    alternate record key pcategorie with duplicates.

data division.        file section.        fd fvidage linage is 66.        1 sligne pic x(120).        fd fpersonnel.        1 perso.

  3 pusine     pic xx.

  3 pservice   pic xxx.

  3 pnum       pic x(7).

  3 pnom       pic x(20).

  3 pprenom    pic x(20).

                3           pic x(10).

  3 pdate      pic x(6).

  3 pcategorie pic xxx.

  3 pnote      pic 99v99.

                3           pic x(5).

WORKING-STORAGE SECTION.

       77 wctf pic 9 value 0.

  88 ff      value 8.

       77 i    pic 999  value 0.

       1 wligne.

                3        pic x(3).

  3 wnum    pic zzz.

                3        pic x(6).

  3 w108    pic x(108).

     

ESAT

-DI

   [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-35

Cour

s C

BL-85

 
     

         11/10/2009  -

11/10/2009

     

D73  vérification du bon fonctionnement du fichier indexé  obtenu

On v

a c

hercher et éditer , en faisant un accès par clé secondaire tous les employés de la catégorie

“ OS

1 ” qui ont une note > 16.

IDENTIFICATION DIVISION.

   PROGRAM-ID. testind.    ENVIRONMENT DIVISION.    configuration section.    input-output section.    file-control.

procedure division.

       debut.

open output fvidage i-o fpersonnel   move "OS1" to pcategorie   start fpersonnel key is >= pcategorie

invalid key  move "il n'y a aps de réponse" to sligne  write sligne       not invalid key  read fpersonnel next record  perform until ff or pcategorie not = "OS1"     if pnote > 16

then   add 1to i   move i to wnum

 

  move perso(1:2)

to w108(1:5)

  move perso(3:3)

to w108(6:6)

  move perso(6:7)

to w108(12:10)

move perso(13:20) to w108(22:23)   move perso(33:20) to w108(45:23)   move perso(53:10) to w108(68:13)   move perso(63:6)    to w108(81:9)   move perso(69:3)    to w108(90:6)   move perso(72:4)    to w108(96:7)   move perso(76:5)    to w108(103:5)   write sligne from wligne

end-if

read fpersonnel next record

at end   set ff to true

end-read  end-perform

  end-start   close fpersonnel fvidage   stop run.


                                                                                                                                                                                                                 36

              C

                                                                                                                                                                                                                    -

D74    résultat obtenu

1     01   DIR   KKKK004   FIRNEROT ANDRE                  0000000000   470129   OS1   1625   %%%%%

2     02   ETU   KKKK005   FOUMI PIERRE                 0000000000   400813   OS1   1700   %%%%%

3     01   ATE   KKKK021   PIROUX ALEX                   0000000000   630208   OS1   1650   %%%%%

4     01   ATE   KKKK035   AVIRY LUC                    0000000000   700208   OS1   1658   %%%%%

5     01   ETU   KKKK038   PERNOD CHRISTIAN              0000000000   720914   OS1   1756   %%%%%

6     01   ATE   KKKK039   VISQUI                 DANIEL 0000000000   420208   OS1   1825   %%%%%

7     01   ETU   KKKK040   LAVIANDE DELPHINE               0000000000   430914   OS1   1902   %%%%%

8     01   ATE   KKKK041   POPINARD ELODIE                 0000000000   440208   OS1   1900   %%%%%

9     02   ETU   KKKK056   FITROCHON BENOIT                 0000000000   560914   OS1   1642   %%%%%

10    02 ETU   KKKK060   CHIASSOUX-BERNARD      ANTHONY                0000000000 520914   OS1   1825   %%%%%

11    02 ETU   KKKK062   PISSOUNET              MARCEL                 0000000000 540914   OS1   1925   %%%%%

12    01 DIR   KKKK077   ROUSSI                 EMILE                  0000000000 700208   OS1   1800   %%%%%

13    01 DIR   KKKK079   PETITFOU               JACQUES                0000000000 690208   OS1   1700   %%%%%

14    01 ETU   KKKK084   GRIMONCHAMP            THIBAUT                0000000000 720914   OS1   1628   %%%%%

15    01 ETU   KKKK098   LE GRALOU              HERVE                  0000000000   520914 OS1   1825   %%%%%

16    01 ETU   KKKK124   BARBOUZON              MATHILDE               0000000000 420914   OS1   1627   %%%%%

17    01 ETU   KKKK126   DA RIVIERA             JUAN                   0000000000 630914   OS1   1628   %%%%%

18    01 ETU   KKKK128   CRUCHON                VIVIEN                 0000000000 560914   OS1   1626   %%%%%

19    02 ETU   KKKK130   LE CHAUVE              STANISLAS              0000000000 580914   OS1   1622   %%%%%

20    02 ETU   KKKK132   BOVEAU                 JEAN                   0000000000 590914   OS1   1622   %%%%%

21    01 DIR   KKKK151   CATIFLON               JACQUES                0000000000 690208   OS1   1700   %%%%%

22    01 ETU   KKKK152   VALBOUC                PIERRE                 0000000000 590914   OS1   1725   %%%%%

23    01 DIR   KKKK153   TIFFART                CONSTANT               0000000000 590208   OS1   1725   %%%%%

24    01 ETU   KKKK154   FRIDASSOU              RENAUD                 0000000000 580914   OS1   1627   %%%%%

25    01 ATE   KKKK155   HERNESTO               NADEGE                 0000000000 580208   OS1   1700   %%%%%

26    01 ETU   KKKK156   JAMBALER               ANNICK                 0000000000 580914   OS1   1825   %%%%%

27    01 ATE   KKKK157   JAMBON-DUPAYS          PAULE                  0000000000 750208   OS1   1812   %%%%%

28    01 ATE   KKKK159   BLANCHOT               JACQUES                0000000000 740208   OS1   1825   %%%%%

                                                                                                                                                                                                                 37

              C

                                                                                                                                                                                                                    -

Cas d’une modification de la collating séquence

D81  résultat souhaité

On veut refaire l’exercice D61 (page 30) mais , on veut que dans la liste des employés , toutes les personnes dont le nom commence par “ m ” ou “ M ” soient rangées en premier.

On pourrait faire un programme pour traiter ce problème , mais on peut aussi se créer son propre alphabet constitué de telle sorte que la lettre “ m ” et la lettre “ M ” soient avant “ a ” ou “ A ”.

D82  programme cobol

IDENTIFICATION DIVISION.        PROGRAM-ID. collusin.

ENVIRONMENT DIVISION.        configuration section.       * object-computer. pc486

      *  program collating sequence is lafar1.

special-names.

alphabet lafar1 is

1 thru 64

"m" "M"

"a" thru "l" "n" thru "z"

D8

"A" thru "L" "N" thru "Z".

input-output section.

file-control.     select ftri assign to disk.     select fetu02 assign to "c:\laf\cobol\docu\".     select fdir02  assign to "c:\laf\cobol\docu\".     select fbilan  assign to "c:\laf\cobol\docu\".

data division.        file section.

sd ftri.        1 senreg.

  3 tusine   pic xx.

  3 tservice pic xxx.

                3         pic x(7).

  3 tnom     pic x(20).

3 tprenom  pic x(20).   3            pic x(28).

fd fetu02.        1 enretu pic x(80).

fd fdir02.        1 enrdir pic x(80).

fd fbilan.        1 bilan pic x(80).

WORKING-STORAGE SECTION.

procedure division.        tri section.        debut.

   sort ftri on ascending  key tnom tprenom collating sequence is lafar1 using  fetu02 fdir02 giving fbilan

stop run.

38

              C

                                                                                                                                                                                                                    -

D83  programme cobol

n°   1      02 ETU   KKKK032   MACARONETTINI          LEON                   0000000000 690914   TEF   1350   %%%%% n°   2      02   DIR   KKKK057 MOMEAU                 FERNAND                0000000000   690208   IPE 1160   %%%%% n°   3      02   ETU   KKKK136   MULLER AGATHE                 0000000000   550914   IEF   1525   %%%%% n°   4 02   ETU   KKKK058   MURINI                 ANGE                   0000000000 690914   OS1   1105   %%%%% n°   5      02   DIR   KKKK133   BISTOUKET PIERRE                 0000000000   590208   OS1   1204   %%%%% n°   6 02   ETU   KKKK054   BOBARD                 JEAN                   0000000000 560914   TEF   1225   %%%%% n°   7      02   ETU   KKKK132   BOVEAU                 JEAN 0000000000   590914   OS1   1622   %%%%% n°   8      02   ETU   KKKK028 CARMICON               JEAN                   0000000000   420914   TEF 1725   %%%%% n°   9      02   DIR   KKKK135   CASANOVIEN             ALICE                  0000000000 550208   IPE   1250   %%%%% n°  10      02   ETU   KKKK030 CASBONBINI             MARCEL                 0000000000   620914   TEF 1236   %%%%% n°  11      02   ETU   KKKK050   CHIALOUX FLORENCE               0000000000   410914   TEF   1725   %%%%% n°  12 02   DIR   KKKK059   CHIASSOU               ZOE                    0000000000 690208   IPE   1500   %%%%% n°  13      02   ETU   KKKK060 CHIASSOUX-BERNARD      ANTHONY                0000000000   520914   OS1 1825   %%%%% n°  14      02   DIR   KKKK053   DE LA CARTOUCHE JACQUES                0000000000   500208   IPE   1345   %%%%% n°  15 02   ETU   KKKK140   DESSALON               OLIVIA                 0000000000 510914   IEF   1625   %%%%% n°  16      02   ETU   KKKK026 DUFER                  CASIMIR                0000000000   420914   IEF 1550   %%%%% n°  17      02   DIR   KKKK061   EBOUNARD BERTRAND               0000000000   510208   IPE   1200   %%%%% n°  18      02 ETU   KKKK056   FITROCHON              BENOIT                 0000000000 560914   OS1   1642   %%%%% n°  19      02   DIR   KKKK055 FITROCHON              GISELE                 0000000000   560208   IPE 1641   %%%%% n°  20      02   ETU   KKKK005   FOUMI PIERRE                 0000000000   400813   OS1   1700   %%%%% n°  21 02   DIR   KKKK137   JACQUOUX               JACQUES                0000000000 550208   OS1   1552   %%%%% n°  22      02   ETU   KKKK034   LABAF                  JEAN 0000000000   700914   TEF   1625   %%%%% n°  23      02   ETU   KKKK138 LABROUILLE             ISIDORE                0000000000   550914   IPE 1625   %%%%% n°  24      02   DIR   KKKK131   LE CHAUVE              IRENE 0000000000   580208   IPE   1202   %%%%% n°  25      02   ETU   KKKK130   LE CHAUVE              STANISLAS              0000000000   580914   OS1   1622 %%%%% n°  26      02   ETU   KKKK018   N'GORE                 JEAN                   0000000000 560914   TEF   1650   %%%%% n°  27      02   DIR   KKKK051 PASTISSE               ALPHONSE               0000000000   410208   IPE 1800   %%%%% n°  28      02   ETU   KKKK002   PIOLA JEAN                   0000000000   420914   TEF   1625   %%%%% n°  29 02   ETU   KKKK062   PISSOUNET              MARCEL                 0000000000 540914   OS1   1925   %%%%% n°  30      02   DIR   KKKK063 PISSOUNET              JACQUES                0000000000   530208   OS1 1550   %%%%% n°  31      02   ETU   KKKK016   RASPITOU JEAN                   0000000000   450914   TEF   1425   %%%%% n°  32 02   ETU   KKKK052   ROUPIGNAC              THIERRY                0000000000 500914   TEF   1425   %%%%% n°  33      02   ETU   KKKK134 ROYER-MOLLOUX          VERONIQUE              0000000000   550914   IEF 1624   %%%%% n°  34      02   DIR   KKKK139   SOMMIER-DUVALLON MARCELLIN              0000000000   520208   OS1   1200   %%%%% n°  35      02  DIR   KKKK017   ZYVANISEVITCHSKY       JULES                  0000000000 420208   IPE   1550   %%%%%


 E

La fusion des fichiers

E1        principe

A l’aide du verbe MERGE , on peut combiner (fusionner) plusieurs fichiers (en principe avec des enregistrements de taille identique ) en les triant selon la même séquence de clés puis traiter le résultat obtenu par un programme de sortie (output procedure) ou ranger celui-ci sur un fichier disque avec la clause GIVING.

La fusion par MERGE semble être une technique redondante par rapport au tri par SORT avec une clause USING suivie de plusieurs noms de fichier.

[Le cas D6 (page 30) montre la fusion de trois fichiers (hétérogènes ou non) ]

Le principe de fonctionnement de la fusion est le même que pour le tri : la seule différence est qu’on n’a pas la possibilité de faire un programme d’entrée avant le tri des données.

 E2    Format du verbe MERGE

ASCENDING

                          MERGE nom du fichier tri  ?  ON KEY clé n°1    clé n° 2 clé n° i  ?

         
 

 priorit?

   

ESAT-DI   [LRE][

              CHAPÎTRE 1

0  :   

 

Le tri , la fusion des fichiers[   ]-]]

       page 10-39

 

]

 

Cours CBL-85[

   
 

         11/10/2009  -

11/10/2009

 

DESCENDING

ASCENDING

                                                                             ON KEY clé n°j    clé n° k clé n° n

DESCENDING

COLLATING SEQUENCEnom d’alphabet           ?

USINGnom de fichier-2 nom de fichier-3 nom de fichier-i...

                 ? OUTPUT PROCEDUREnom-procédure-1 THRU nom-procédure-2

GIVINGnom de fichier-résultat

E21     règles

????Lmêmes règles que pour le tri cf page 6

Comme pour l’output procédure d’un tri , il faut lire le fichier trié obtenu avec RETURN.

ESAT-DI [LRE]

              CHAPÎTRE 10  :    Le tri , la fusion des fichiers-

       page 10-40

Cours CBL-85

 
 

         11/10/2009  -

11/10/2009

E3

 même exercice que celui traité avec un tri “  using  ” - cf page 31 parag. D61

avec un tri sur le service (n° usine,code service)

E31  programme cobol

IDENTIFICATION DIVISION.

       PROGRAM-ID. merdge.        ENVIRONMENT DIVISION.        configuration section.        input-output section.

file-control.      select ftri         assign to disk .

select fetu02

assign to "c:\laf\cobol\docu\".

select fdir02

assign to "c:\laf\cobol\docu\".

select ftable

assign to "c:\laf\cobol\docu\".

select fbilan

assign to "c:\laf\cobol\docu\".

data division.        file section.        sd ftri.        1 senreg.

3 tid-service pic x(5).

3    pic x(75).        fd ftable.        1 etable pic x(34).

fd fetu02.        1 enretu pic x(80).

fd fdir02.        1 enrdir pic x(80).

       fd fbilan.        1 bilan pic x(80).        procedure division.

debut.    merge ftri on ascending key tid-service

using fetu02 fdir02 ftable giving fbilan

stop run.

E32  résultat obtenu

n° 1      01   dir   -------    direction       %%% %%                                                              n°   2 01   etu   -------    bureau    études%%% %%                                                              n°   3 02   DIR   KKKK133   BISTOUKET              PIERRE                 0000000000 590208   OS1   1204   %%%%% n°   4      02   DIR   KKKK135   CASANOVIEN ALICE                  0000000000   550208   IPE   1250   %%%%% n°   5 02   DIR   KKKK059   CHIASSOU               ZOE                    0000000000 690208   IPE   1500   %%%%% n°   6      02   DIR   KKKK053   DE LA CARTOUCHE     JACQUES                0000000000   500208   IPE   1345   %%%%% n°   7 02   DIR   KKKK061   EBOUNARD               BERTRAND               0000000000 510208   IPE   1200   %%%%% n°   8      02   DIR   KKKK055 FITROCHON              GISELE                 0000000000   560208   IPE 1641   %%%%% n°   9      02   DIR   KKKK137   JACQUOUX JACQUES                0000000000   550208   OS1   1552   %%%%% n°  10 02   DIR   KKKK131   LE CHAUVE              IRENE                  0000000000 580208   IPE   1202   %%%%% n°  11      02   DIR   KKKK057 MOMEAU                 FERNAND                0000000000   690208   IPE 1160   %%%%% n°  12      02   DIR   KKKK051   PASTISSE ALPHONSE               0000000000   410208   IPE   1800   %%%%% n°  13 02   DIR   KKKK063   PISSOUNET              JACQUES                0000000000 530208   OS1   1550   %%%%% n°  14      02   DIR   KKKK139 SOMMIER-DUVALLON       MARCELLIN              0000000000   520208   OS1 1200   %%%%% n°  15      02   DIR   KKKK017   ZYVANISEVITCHSKY JULES                  0000000000   420208   IPE   1550   %%%%% n°  16 02   ETU   KKKK054   BOBARD                 JEAN                   0000000000 560914   TEF   1225   %%%%% n°  17      02   ETU   KKKK132 BOVEAU                 JEAN                   0000000000   590914   OS1 1622   %%%%% n°  18      02   ETU   KKKK028   CARMICON JEAN                   0000000000   420914   TEF   1725   %%%%% n°  19 02   ETU   KKKK030   CASBONBINI             MARCEL                 0000000000 620914   TEF   1236   %%%%% n°  20      02   ETU   KKKK050 CHIALOUX               FLORENCE               0000000000   410914   TEF 1725   %%%%% n°  21      02   ETU   KKKK060   CHIASSOUX-BERNARD ANTHONY                0000000000   520914   OS1   1825   %%%%% n°  22 02   ETU   KKKK140   DESSALON               OLIVIA                 0000000000 510914   IEF   1625   %%%%% n°  23      02   ETU   KKKK026 DUFER                  CASIMIR                0000000000   420914   IEF 1550   %%%%% n°  24      02   ETU   KKKK056   FITROCHON BENOIT                 0000000000   560914   OS1   1642   %%%%% n°  25 02   ETU   KKKK005   FOUMI                  PIERRE                 0000000000 400813   OS1   1700   %%%%% n°  26      02   ETU   KKKK034 LABAF                  JEAN                   0000000000   700914   TEF 1625   %%%%% n°  27      02   ETU   KKKK138   LABROUILLE ISIDORE                0000000000   550914   IPE   1625   %%%%% n°  28 02   ETU   KKKK130   LE CHAUVE              STANISLAS              0000000000 580914   OS1   1622   %%%%% n°  29      02   ETU   KKKK032 MACARONETTINI          LEON                   0000000000   690914   TEF   1350 %%%%% n°  30      02   ETU   KKKK136   MULLER AGATHE                 0000000000   550914   IEF   1525   %%%%% n°  31 02   ETU   KKKK058   MURINI                 ANGE                   0000000000 690914   OS1   1105   %%%%% n°  32      02   ETU   KKKK018 N'GORE                 JEAN                   0000000000   560914   TEF 1650   %%%%% n°  33      02   ETU   KKKK002   PIOLA JEAN                   0000000000   420914   TEF   1625   %%%%% n°  34 02   ETU   KKKK062   PISSOUNET              MARCEL                 0000000000 540914   OS1   1925   %%%%% n°  35      02   ETU   KKKK016 RASPITOU               JEAN                   0000000000   450914   TEF 1425   %%%%% n°  36      02   ETU   KKKK052   ROUPIGNAC THIERRY                0000000000   500914   TEF   1425   %%%%% n°  37 02   ETU   KKKK134   ROYER-MOLLOUX          VERONIQUE              0000000000 550914   IEF   1624   %%%%% n°  38      02   dir   -------    direction       %%% %%                                                              n°  39 02   etu   -------    bureau    études%%% %%                                                              n°  40 01   ate   -------    atelier-général %%%   %%                                                              n° 41      02   ate   -------    atelier général %%% %%                                                             


80