Bonjour,
Je me suis fait un programme qui me permet de passer un fichier sequentiel en sequentiel-indexe par le numéro (clef principale), le nom et l'année de naissance (clefs alternatives).
La structure d'un enregistrement est la suivante :
Code COBOL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 01 F-ETUD. 02 F-NUM PIC 999. 02 F-NOM PIC X(20). 02 F-PRENOM PIC X(20). 02 F-ADR PIC X(25). 02 F-ANAISS PIC 9(4).
Je me suis ensuite fait un programme pour lire ce fichier obtenu... Et là... Je ne lis rien
Je ne vois pas où je me suis trompée dans le code. Donc si quelqu'un pouvait éclairer un peu mon chemin ^^
Voici mon fichier indexe : Pièce jointe 41854 -- à renommer en *.DAT
Et mon code :
Code COBOL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212 000010*0011111111112222222222333333333344444444445555555555666666666677*7777777* 000020*8901234567890123456789012345678901234567890123456789012345678901*3456789* 000030************************************************************************** 000040 IDENTIFICATION DIVISION. 000050 PROGRAM-ID. P6. 000060 AUTHOR. Deallyra. 000070 DATE-WRITTEN. 05-02-2009 000080 DATE-COMPILED. 000090 000100 ENVIRONMENT DIVISION. 000110 INPUT-OUTPUT SECTION. 000120 FILE-CONTROL. 000130 SELECT FETUD-ID ASSIGN TO "FETUDIND.DAT" 000140 ORGANIZATION IS INDEXED 000150 ACCESS MODE IS SEQUENTIAL 000160 RECORD KEY F-NUM-ID 000170 ALTERNATE RECORD KEY F-NOM-ID WITH DUPLICATES 000180 ALTERNATE RECORD KEY F-ANAISS-ID WITH DUPLICATES 000190 FILE STATUS IS W-ETATFICHIER. 000200 000210 DATA DIVISION. 000220 FILE SECTION. 000230 FD FETUD-ID. 000240 01 F-ETUD-ID. 000250 02 F-NUM-ID PIC 999. 000260 02 F-NOM-ID PIC X(20). 000270 02 F-PRENOM-ID PIC X(20). 000280 02 F-ADR-ID PIC X(25). 000290 02 F-ANAISS-ID PIC 9(4). 000300 000310 WORKING-STORAGE SECTION. 000320 77 W-CHOIX PIC X. 000330 88 W-CHOIX-SUIVANT-QUITTER VALUE "S" "Q". 000340 77 W-COMPTEUR PIC 9. 000350 77 W-ETATFICHIER PIC XX. 000360 77 W-FINFICHIER PIC A. 000370* VALEUR LIGNE POUR AFFICHAGE ENREGISTREMENT 000380 77 W-LIGNE PIC 99. 000390* VARIABLE TEMPORAIRE POUR VERIFIER LES SAISIES 000400 77 W-TEMP PIC X. 000410* LA DATE ACTUELLE 000420 01 W-DATE. 000430 02 W-JOUR PIC 99. 000440 02 W-MOIS PIC 99. 000450 02 W-ANNEE PIC 99. 000460 000470*0011111111112222222222333333333344444444445555555555666666666677*7777777* 000480*8901234567890123456789012345678901234567890123456789012345678901*3456789* 000490************************************************************************** 000500 PROCEDURE DIVISION. 000510* *************** 000520* CE PROGRAMME PERMET A L'UTILISATEUR DE LIRE LES ENREGISTREMENTS 000530* CONTENUS DANS FETUD.DAT PAR UN MODE SEQUENTIEL INDEXE. 000540* LES ENREGISTREMENTS SERONT LUS UN PAR UN. 000550* *************** 000560 DEBUT. 000570 PERFORM AFFICHAGE-ENTETE-P6 000580 PERFORM OUVERTURE-FICHIER 000590 PERFORM BOUCLE-D-AFFICHAGE 000600 PERFORM FIN-PROGRAMME 000610 FIN. 000620 000630 000640 AFFICHAGE-ENTETE-P6. 000650* *************** 000660* AFFICHE L'ENTETE DU PROGRAMME 000670* *************** 000680 ACCEPT W-DATE FROM DATE 000690 DISPLAY "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" AT LINE 01 COLUMN 8 000700 DISPLAY "~ ~" AT LINE 02 COLUMN 8 000710 DISPLAY "~ Programme de Gestion ~" AT LINE 03 COLUMN 8 000720 DISPLAY "~ Des Etudiants ~" AT LINE 04 COLUMN 8 000730 DISPLAY "~ ~" AT LINE 05 COLUMN 8 000740 DISPLAY "~ P6.cbl ~" AT LINE 06 COLUMN 8 000750 DISPLAY "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" AT LINE 07 COLUMN 8 000760 DISPLAY W-JOUR, "/", W-MOIS, "/", W-ANNEE 000770 AT LINE 06 COLUMN 10 000780* *************** 000790 FIN-AFFICHAGE-ENTETE-P6. 000800 EXIT. 000810 000820 OUVERTURE-FICHIER. 000830* *************** 000840* OUVERTURE DU FICHIER EN LECTURE 000850* TEST D'EXISTANCE DU FICHIER 000860* *************** 000870 OPEN INPUT FETUD-ID 000880 IF W-ETATFICHIER = "05" THEN 000890 DISPLAY "L'OUVERTURE DU FICHIER A ECHOUEE." 000900 AT LINE 09 COLUMN 02 000910 ACCEPT W-TEMP 000920 PERFORM FIN-PROGRAMME 000930 END-IF 000940 MOVE "F" TO W-FINFICHIER 000950 READ FETUD-ID INTO F-ETUD-ID 000960 AT END MOVE "V" TO W-FINFICHIER 000970 END-READ 000980* *************** 000990 END-OUVERTURE-FICHIER. 001000 EXIT. 001010 001020 BOUCLE-D-AFFICHAGE. 001030* *************** 001040* AFFICHAGE DES ETUDIANTS 001050* BOUCLE PRINCIPALE AFFICHANT W-NBETUDIANTS D'ETUDIANTS. 001060* *************** 001070 PERFORM UNTIL W-CHOIX = "Q" 001080 PERFORM LECTURE 001090 PERFORM SUIVANT 001100 MOVE 0 TO W-COMPTEUR 001110 ADD 1 TO W-LIGNE 001120* *************** 001130* TEST DE VALIDITE DE LA SAISIE DE CONTINUATION 001140* Q ou S 001150* *************** 001160 PERFORM UNTIL W-CHOIX-SUIVANT-QUITTER 001170 OR W-COMPTEUR = 3 001180 PERFORM TEST-SUIVANT 001190 END-PERFORM 001200* *************** 001210 IF W-COMPTEUR = 3 THEN 001220 MOVE "Q" TO W-CHOIX 001230 END-IF 001240 END-PERFORM 001250* *************** 001260 FIN-BOUCLE-AFFICHAGE. 001270 EXIT. 001280 001290 LECTURE. 001300* *************** 001310* ON AFFICHE LES ATTRIBUTS D'UN ENREGISTREMENT ETUDIANT 001320* *************** 001330 MOVE 10 TO W-LIGNE 001340 DISPLAY "Num : ", F-NUM-ID 001350 AT LINE W-LIGNE COLUMN 02 001360 DISPLAY "Nom : ", F-NOM-ID 001370 AT LINE W-LIGNE COLUMN 12 001380 DISPLAY "Prenom : ", F-PRENOM-ID 001390 AT LINE W-LIGNE COLUMN 45 001400 ADD 1 TO W-LIGNE 001410 DISPLAY "Naissance : ", F-ANAISS-ID 001420 AT LINE W-LIGNE COLUMN 12 001430 ADD 1 TO W-LIGNE 001440 DISPLAY "Adresse : ", F-ADR-ID 001450 AT LINE W-LIGNE COLUMN 12 001460 COMPUTE W-LIGNE = W-LIGNE + 2 001470 READ FETUD-ID INTO F-ETUD-ID 001480 AT END MOVE "V" TO W-FINFICHIER 001490* PEUT ETRE TESTE, A LA PLACE, LA VALEUR 11 POUR 001500* W-ETATFICHIER 001510 END-READ 001520* *************** 001530 FIN-LECTURE. 001540 EXIT. 001550 SUIVANT. 001560* *************** 001570* QUELS CHOIX SONT PROPOSES A L'UTILISATEUR UNE FOIS 001580* L'AFFICHAGE DU LOT TERMINE? 001590* *************** 001600 IF W-FINFICHIER = "V" THEN 001610 DISPLAY "Q)UITTER" 001620 AT LINE W-LIGNE COLUMN 02 WITH BLANK LINE 001630 ELSE 001640 DISPLAY "Q)UITTER S)UIVANT" 001650 AT LINE W-LIGNE COLUMN 02 001660 END-IF 001670 ADD 1 TO W-LIGNE 001680 DISPLAY ">> " AT LINE W-LIGNE COLUMN 04 001690 ACCEPT W-CHOIX WITH HIGHLIGHT UNDERLINE UPPER 001700 AT LINE W-LIGNE COLUMN 07 001710 MOVE FUNCTION UPPER-CASE(W-CHOIX) TO W-CHOIX 001720* *************** 001730 FIN-SUIVANT. 001740 EXIT. 001750 001760 TEST-SUIVANT. 001770* *************** 001780* VERIFICATION DE VALIDITE SAISIE UTILISATEUR POUR CONTINUER 001790* OU ARRETER L'AFFICHAGE 001800* *************** 001810 IF W-CHOIX IS ALPHABETIC THEN 001820 DISPLAY "VOTRE SAISIE EST INCORRECTE. VEUILLEZ RECOMMENCER. 001830- " TAPEZ S OU Q." 001840 AT LINE W-LIGNE COLUMN 02 WITH BLANK LINE 001850 ELSE 001860 DISPLAY "VOUS N'AVEZ PAS SAISIE UNE LETTRE. VEUILLEZ 001870- "RECOMMENCER" 001880 AT LINE W-LIGNE COLUMN 02 WITH BLANK LINE 001890 END-IF 001900 ADD 1 TO W-COMPTEUR 001910 SUBTRACT 1 FROM W-LIGNE 001920 DISPLAY ">> " 001930 AT LINE W-LIGNE COLUMN 04 WITH BLANK LINE 001940 ACCEPT W-CHOIX AT LINE W-LIGNE COLUMN 07 001950 WITH HIGHLIGHT UNDERLINE UPPER 001960 ADD 1 TO W-LIGNE 001970 DISPLAY AT LINE W-LIGNE WITH BLANK LINE 001980 MOVE FUNCTION UPPER-CASE(W-CHOIX) TO W-CHOIX 001990* *************** 002000 FIN-TEST-SUIVANT. 002010 EXIT. 002020 002030 FIN-PROGRAMME. 002040* *************** 002050* FIN DU PROGRAMME 002060* *************** 002070 STOP RUN 002080* *************** 002090 FIN-FIN-PROGRAMME. 002100 EXIT. 002110
Si vous avez également des critiques quant à la façon dont je code... Je prendrai tous les conseils ^^
Merci à vous,
Partager