IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

[PC-XP-PerCobol] Lecture Fichier Indexé


Sujet :

Cobol

  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut [PC-XP-PerCobol] Lecture Fichier Indexé
    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,
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    - Est ce tu veux bien préciser ton OS et ton Cobol par un tag devant le titre du thread.

    - Apparemment ton fichier est vide, voilà ce que j'ai trouvé dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     p                   ÿÿÿÿÿÿÿÿ               ˜  ƒ                                            H   H                                                                                                                                                                                                                                                                                                                                                                                                                   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà              €Ú                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          à              €Ú                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ÿÿÿÿÿÿÿÿà              €Ú   
    A part des trucs réservés aux index, il n'y a rien d'autre ?

  3. #3
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut


    Le fichier DAT, je l'ai regénéré et cela semble correct maintenant...
    Enfin correct, il ne m'affiche rien avant l'étudiant au num 23, ou plutôt, il semble sauter au 23. Mais cela est retrouvé dans le fichier FETUDIND.DAT
    Et il semble corrompu. Le dernier enregistrement affiché est le 0 et le nom ainsi que le prénom sont "coupés". Le nom est répartit sur les deux champs de données.

    Je suis confuse... Je pensais pourtant avoir déjà tenté de refaire le fichier des enregistrement.
    Pièce jointe 41877


    Comment est créé un fichier indexé ?
    Il y a une partie index et une partie enregistrement mais je ne comprends pas sa logique.

    Il fait quoi ? Une sorte de petit tableau avec les index qu'il parcourt plus rapidement qu'un enregistrement complet et en fonction de la position il retrouve l'enregistrement désigné ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  4. #4
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    :s

    Je ne comprends pas...

    J'ai des résultats aléatoires pour la génération du fichier indéxé...

    Désormais j'ai mes enregistrements de corrects.
    Pièce jointe 41878

    Et la génération est faîte à partir de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    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
    000010*0011111111112222222222333333333344444444445555555555666666666677*7777777*
    000020*8901234567890123456789012345678901234567890123456789012345678901*3456789*
    000030**************************************************************************
    000040 IDENTIFICATION DIVISION.
    000050 PROGRAM-ID. P5.
    000060 AUTHOR. Deallyra.
    000070 DATE-WRITTEN. 04-02-2009
    000080 DATE-COMPILED.
    000090
    000100 ENVIRONMENT DIVISION.
    000110 INPUT-OUTPUT SECTION.
    000120 FILE-CONTROL.
    000130     SELECT FETUD ASSIGN TO "FETUD.DAT".
    000140     SELECT FETUD-ID ASSIGN TO "FETUDIND.DAT"
    000150       ORGANIZATION IS INDEXED
    000160       ACCESS MODE IS DYNAMIC
    000170       RECORD KEY F-NUM-ID
    000180       ALTERNATE RECORD KEY F-NOM-ID WITH DUPLICATES
    000190       ALTERNATE RECORD KEY F-ANAISS-ID WITH DUPLICATES
    000200       FILE STATUS IS W-ETATFICHIER.
    000210
    000220 DATA DIVISION.
    000230 FILE SECTION.
    000240     FD FETUD.
    000250       01 F-ETUD.
    000260         02 F-NUM PIC 999.
    000270         02 F-NOM PIC X(20).
    000280         02 F-PRENOM PIC X(20).
    000290         02 F-ADR PIC X(25).
    000300         02 F-ANAISS PIC 9(4).
    000310
    000320     FD FETUD-ID.
    000330       01 F-ETUD-ID.
    000340         02 F-NUM-ID PIC 999.
    000350         02 F-NOM-ID PIC X(20).
    000360         02 F-PRENOM-ID PIC X(20).
    000370         02 F-ADR-ID PIC X(25).
    000380         02 F-ANAISS-ID PIC 9(4).
    000390
    000400 WORKING-STORAGE SECTION.
    000410      77 W-ETATFICHIER PIC XX.
    000420      77 W-FINFICHIER PIC A.
    000430      77 W-TEMP PIC X.
    000440      77 W-COLUMN PIC 99.
    000450
    000460*     LA DATE ACTUELLE      
    000470      01  W-DATE.
    000480        02  W-JOUR PIC 99.
    000490        02  W-MOIS PIC 99.
    000500        02  W-ANNEE PIC 99.
    000510
    000520*0011111111112222222222333333333344444444445555555555666666666677*7777777*
    000530*8901234567890123456789012345678901234567890123456789012345678901*3456789*
    000540**************************************************************************
    000550 PROCEDURE DIVISION.
    000560*    ***************
    000570*    CE PROGRAMME PERMET DE PASSER D'UN FICHIER SEQUENTIEL A UN
          *      FICHIER EN SEQUENTIEL INDEXE PAR LE NUMERO ET LE NOM.
    000620*    ***************
    000630
    000640 DEBUT.
    000650   PERFORM AFFICHAGE-ENTETE-P5
    000660   PERFORM OUVERTURE-FICHIER-SEQ
    000670   PERFORM OUVERTURE-FICHIER-ID
    000680   PERFORM RECOPIE
    000690   PERFORM FIN-PROGRAMME
    000700 FIN.
    000710
    000720 AFFICHAGE-ENTETE-P5.
    000730*    ***************
    000740*    AFFICHE L'ENTETE DU PROGRAMME
    000750*    ***************
    000760     ACCEPT W-DATE FROM DATE
    000770     DISPLAY "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" AT LINE 01 COLUMN 8
    000780     DISPLAY "~                            ~" AT LINE 02 COLUMN 8
    000790     DISPLAY "~    Programme de Gestion    ~" AT LINE 03 COLUMN 8
    000800     DISPLAY "~       Des Etudiants        ~" AT LINE 04 COLUMN 8
    000810     DISPLAY "~                            ~" AT LINE 05 COLUMN 8
    000820     DISPLAY "~                     P5.cbl ~" AT LINE 06 COLUMN 8
    000830     DISPLAY "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" AT LINE 07 COLUMN 8
    000840     DISPLAY W-JOUR, "/", W-MOIS, "/", W-ANNEE 
    000850       AT LINE 06 COLUMN 10
    000860*    ***************
    000870 FIN-AFFICHAGE-ENTETE-P3.
    000880     EXIT.
    000890 OUVERTURE-FICHIER-SEQ.
    000900*    ***************
    000910*    OUVERTURE DU FICHIER SEQUENTIEL EN LECTURE
    000920*      TEST D'EXISTANCE DU FICHIER
    000930*    ***************
    000940     OPEN INPUT FETUD
    000950     IF W-ETATFICHIER = "05" THEN
    000960       DISPLAY "L'OUVERTURE DU FICHIER FETUD A ECHOUEE."
    000970         AT LINE 09 COLUMN 02
    000980       PERFORM FIN-PROGRAMME
    000990     END-IF
    001000     MOVE "F" TO W-FINFICHIER
    001010     READ FETUD INTO F-ETUD
    001020       AT END MOVE "V" TO W-FINFICHIER
    001030     END-READ
    001040*    ***************
    001050 FIN-OUVERTURE-FICHIER-SEQ.
    001060     EXIT.
    001070
    001080 OUVERTURE-FICHIER-ID.
    001090*    ***************
    001100*    OUVERTURE DU FICHIER SEQUENTIEL INDEXE EN ECRITURE
    001110*      TEST D'EXISTANCE DU FICHIER
    001120*    ***************
    001130     OPEN OUTPUT FETUD-ID
    001140     IF W-ETATFICHIER = "05" THEN
    001150       DISPLAY "L'OUVERTURE DU FICHIER FETUD-ID A ECHOUEE."
    001160         AT LINE 09 COLUMN 02
    001170       PERFORM FIN-PROGRAMME
    001180     END-IF
    001190     MOVE "F" TO W-FINFICHIER
    001200     READ FETUD-ID INTO F-ETUD-ID
    001210       AT END MOVE "V" TO W-FINFICHIER
    001220     END-READ
    001230*    ***************
    001240 FIN-OUVERTURE-FICHIER-ID.
    001250     EXIT.
    001260
    001270 RECOPIE.
    001280*    ***************
    001290*    BOUCLE PRINCIPAL
    001300*    
    001310*    ***************
    001320     MOVE "F" TO W-FINFICHIER
    001330     DISPLAY "CONVERSION EN COUR" AT LINE 10 COLUMN 02
    001340     MOVE 10 TO W-COLUMN
    001350     PERFORM UNTIL W-FINFICHIER = "V"
    001360       WRITE F-ETUD-ID FROM F-ETUD
    001370       READ FETUD
    001380         AT END MOVE "V" TO W-FINFICHIER
    001390       END-READ
    001400       DISPLAY "." AT LINE 11 COLUMN W-COLUMN
    001410       ADD 1 TO W-COLUMN
    001420     END-PERFORM
    001430     DISPLAY "CONVERSION TERMINEE" AT LINE 14 COLUMN 02
    001440*    ***************
    001450 FIN-RECOPIE.
    001460     EXIT.
    001470
    001480 FIN-PROGRAMME.
    001490*    ***************
    001500*    FIN DU PROGRAMME
    001510*    ***************
    001520     ACCEPT W-TEMP
    001530     STOP RUN
    001540 FIN-FIN-PROGRAMME.
    001550     EXIT.
    Appelant ce fichier :
    Pièce jointe 41879


    Je n'aime pas quand je ne maîtrise pas ce sur quoi je travaille... Je ne comprends pas...
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  5. #5
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Allons y tout doucement :

    En ce qui concerne les index, ça dépend de la méthode d'indexation adoptée par l'éditeur du compilateur. Grossièrement, il y a un index (le master) en début de fichier et puis des petits index secondaires à l'intérieur du fichier par bloc, par cylindre/secteur/piste, par page, etc. Ce sont des informations indiquant les clés des enregistrements de début et de fin pour faciliter la recherche, donc ça dépend de l'algo de recherche utilisé. Si tu édite ton fichier data tu verras les données mais pas forcement alignées comme dans un fichier de type texte.

    Certains compilateurs utilisent des fichiers index séparés des fichiers data.

    Quelque soit la méthode, ces index contiennent les index primaires et les index alternés/Alternatifs (ou secondaires, auxiliaires, etc...). Les données des fichiers indexés sont difficilement récupérables par autre chose qu'un programme Cobol généré par le même compilo ou un utilitaire du même logiciel. Je ne parle pas des fichiers séquentiels mode ligne avec un CR à la fin de chaque enregistrement de longueur fixe ou variable (légèrement plus compliqués).

    Mais t'occupe trop de ça pour le moment.

    Revenons à nos moutons :

    - Ton fichier texte (le premier) ne me plaît pas beaucoup. Les données
    doivent être de longueur fixe même si tu dois compléter par des blancs ou des zéros en fonction de la nature des données.
    - la déclaration du fichier doit être la même d'un programme à un autre en ce qui concerne les clés primaires ou alternates. CE qui est le cas.

    Commence par ça le temps que je vois ton P5 qui m'a l'air compliqué pour un pgm de conversion.

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    :s

    Il y a beaucoup de blabla pour pas grand chose dans mon P5...


    Merci pour cette explication.

    Cependant, pour les données... Ne sont-elles pas automatiquement complétées par des blancs ou 0 afin de respecter la taille des champs ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  7. #7
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    :s

    Il y a beaucoup de blabla pour pas grand chose dans mon P5...
    Si je me permets un conseil, mais uniquement ce qui est nécessaire à l'exécution du programme en fonction des besoins demandés par celui qui va l'utiliser, plus un peu d'habillage et de contrôle et point à la ligne.
    ...Cependant, pour les données... Ne sont-elles pas automatiquement complétées par des blancs ou 0 afin de respecter la taille des champs ?
    Pas en Cobol, à moins d'utiliser les longueurs variables et ça c'est une autre histoire. Les enregistrements doivent avoir la même description, celle que tu mets dans le FD (File Description). Pour les fichier multi-formats c'est encore une autre histoire.

    Donc commençons par là et on verra. Je ne connais pas ton compilateur, mais j'essayerai de t'aider autant que faire se peut.

  8. #8
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Commencer par ?

    Je dois définir différemment mes fichiers ou alors s'agit-il des données que je renseigne ?


    S'il ne reconnait pas la taille d'un champs par celle que je lui fournis, comment s'occupe-t-il du découpage des données alors ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  9. #9
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Commencer par ?

    Je dois définir différemment mes fichiers ou alors s'agit-il des données que je renseigne ?


    S'il ne reconnait pas la taille d'un champs par celle que je lui fournis, comment s'occupe-t-il du découpage des données alors ?
    Justement. S'il s'attend à trouver une variable pic 999, il faut qu'il trouve 3 c num et ainsi de suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    001Sumika              Kan                 84, rue Isambard
    1951003Hako                Shitamura           90, Place Napoléon
    1978005Hoshimi             Maekawa             45, rue des Soeurs
    Tu vois ici le 1951 en début du 2è enregistrement ?
    Ton fichier doit être saisi par un éditeur de texte sans formatage et CR (Retour Chariot = Fin de ligne) à la fin de chaque ligne. Si tu l'ouvres avec Notepad avec une police courrier est ce que tu vois les données bien alignées ?

    Donc on va commencer par s'assurer de ça, tu refais la conversion et tu testes P6.

    EDIT :

    Certains compilateurs vont exiger pour le traitement de ces fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    organization is line sequential.
    - Je n'ai pas bien vérifié, mais il se peut que dans tes programmes tu aies des READ en trop qui te font perdre le 1er enregistrement.

  10. #10
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Mon fichier a été saisi avec un programme que j'avais fait juste avant

    Avec un tel fichier :
    001Sumika Kan 84, rue Isambard 1951
    003Hako Shitamura 90, Place Napoléon 1978
    005Hoshimi Maekawa 45, rue des Soeurs 1973
    007Sakuratou Takayama 87, rue Michel Ange 1957
    009Sachina Fukuoka 98, Place Napoléon 1970
    011Yokuya Tada 69, Chemin des Bâteliers 1985
    013Harumi Sekiguchi 92, rue de Genêve 1960
    015Makito Araya 57, Rue du Palais 1969
    ...
    P6 ne m'affiche rien.

    Par contre...
    Avec la regénération du fichier indexé via P5, le P6 fonctionne très bien.

    Mais les données du fichier indexé sont illisibles telles quelles.


    Serait-ce une spécificité du compilateur ?

    Les données des fichiers indexés sont difficilement récupérables par autre chose qu'un programme Cobol généré par le même compilo ou un utilitaire du même logiciel. .
    Donc c'est de cela que vous parliez.
    Et la seconde partie

    Je ne parle pas des fichiers séquentiels mode ligne avec un CR à la fin de chaque enregistrement de longueur fixe ou variable (légèrement plus compliqués)
    Ce que vous aviez tenté de me faire faire non ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  11. #11
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    EDIT :

    Certains compilateurs vont exiger pour le traitement de ces fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    organization is line sequential.
    - Je n'ai pas bien vérifié, mais il se peut que dans tes programmes tu aies des READ en trop qui te font perdre le 1er enregistrement.
    Je comprends mieux du coup :3
    En séquentiel, normal que mon P6 ne lise rien du fichier qui est censé être indexé.

    Le problème actuel est que sans rien changer au code, j'ai eu trois résultats différents :s

    Que maintenant, j'ai quelque chose de bon alors que je ne sais pas où était la coquille avant;..
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  12. #12
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    ...En séquentiel, normal que mon P6 ne lise rien du fichier qui est censé être indexé.
    Ah non, tant que l'ORGANIZATION IS INDEXED, l'ACCESS SEQUENTIAL est le mode de lecture (suivant la clé primaire) tu auras des enregistrements dans l'ordre de cette clé.
    Le problème actuel est que sans rien changer au code, j'ai eu trois résultats différents :s

    Que maintenant, j'ai quelque chose de bon alors que je ne sais pas où était la coquille avant;..
    Je ne sais pas .

    Voilà tes traitements faits avec du Cobol/2.

    Fichier FETUD.TXT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    001Sumika              Kan                 84, rue Isambard         1951
    003Hako                Shitamura           90, Place Napoléon       1978
    005Hoshimi             Maekawa             45, rue des Soeurs       1973
    007Sakuratou           Takayama            87, rue Michel Ange      1957
    009Sachina             Fukuoka             98, Place Napoléon       1970
    011Yokuya              Tada                69, Chemin des Bâteliers 1985
    013Harumi              Sekiguchi           92, rue de Genêve        1960
    015Makito              Araya               57, Rue du Palais        1969
    017Karina              Nomura              33, rue La Boétie        1985
    019Ari                 Takuza              61, rue Marie de Médicis 1952
    021Etsuko              Ozawa               56, Rue St Ferréol       1946
    023Mutsuto             Kamuta              2, boulevard Albin Durand1956
    025Koume               Taguchi             73, Faubourg Saint Honoré1953
    027Nobuto              Shiyouji            29, rue Victor Hugo      1983
    029Rioko               Kanada              96, Avenue Milies Lacroix1973
    031Teruyuki            Oosawa              30, rue Gustave Eiffel   1960
    033Kyoumi              Katagari            7, Rue St Ferréol        1975
    035Tomoharu            Sonoda              24, rue Nationale        1972
    037Chiaki              Inada               29, rue Adolphe Wurtz    1981
    039Meguru              Umaba               73, rue Roosevelt        1955
    041Masaru              Tokuta              14, Place de la Madeleine1975
    Programme P55.CBL de conversion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    000040 IDENTIFICATION DIVISION.
    000050 PROGRAM-ID. P55.
    000100 ENVIRONMENT DIVISION.
    000110 INPUT-OUTPUT SECTION.
    000120 FILE-CONTROL.
    000130     SELECT FETUD ASSIGN TO "FETUD.TXT"
    000140       ORGANIZATION IS LINE SEQUENTIAL.
    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.    
    000210 DATA DIVISION.
    000220 FILE SECTION.
    000230     FD FETUD.
    000240       01 F-ETUD.
    000250         02 F-NUM PIC 999.
    000260         02 F-NOM PIC X(20).
    000270         02 F-PRENOM PIC X(20).
    000280         02 F-ADR PIC X(25).
    000290         02 F-ANAISS PIC 9(4).
    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.
               77 WFIN-FICHIER PIC X.
                  88 FIN-FICHIER VALUE "F".
    000500 PROCEDURE DIVISION.
    000560 DEBUT.
    000870     OPEN INPUT FETUD OUTPUT FETUD-ID.
    000950     MOVE " " to WFIN-FICHIER.
               PERFORM TRAIT UNTIL FIN-FICHIER.
    000870     CLOSE FETUD FETUD-ID.
               STOP RUN.
            TRAIT.
    000950     READ FETUD AT END MOVE "F" to WFIN-FICHIER.
               IF NOT FIN-FICHIER PERFORM RECOPIE.
    001340 RECOPIE.
               WRITE F-ETUD-ID FROM F-ETUD INVALID STOP "Erreur Ecriture".
    Programme P66.CBL d'Affichage de l'indexé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    000040 IDENTIFICATION DIVISION.
    000050 PROGRAM-ID. P66.
    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.    
    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.
               77 WFIN-FICHIER   PIC X.
                  88 FIN-FICHIER VALUE "F".
               77 WFIN-TRAIT     PIC X.
                  88 FIN-TRAIT   VALUE "Q" "q".
    000500 PROCEDURE DIVISION.
    000560 DEBUT.
    000870     OPEN INPUT FETUD-ID.
    000950     MOVE " " to WFIN-FICHIER.
               PERFORM TRAIT UNTIL FIN-FICHIER OR FIN-TRAIT.
    000870     CLOSE FETUD-ID.
               STOP RUN.
           TRAIT.
    000950     READ FETUD-ID AT END MOVE "F" to WFIN-FICHIER.
               IF NOT FIN-FICHIER 
                  PERFORM AFFICHAGE
                  DISPLAY "Un autre ?? ou Q pour Quitter"
                  ACCEPT WFIN-TRAIT.
           AFFICHAGE.
    001340     DISPLAY " " 
    001340     DISPLAY "Num.......: ", F-NUM-ID 
    001360     DISPLAY "Nom.......: ", F-NOM-ID 
    001380     DISPLAY "Prenom....: ", F-PRENOM-ID 
    001410     DISPLAY "Naissance.: ", F-ANAISS-ID 
    001440     DISPLAY "Adresse...: ", F-ADR-ID
    Exécution de P66 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    17/02/2009 18:30:44,64
    C:\DVP~1\COBOL-~1>p66
    
    Num.......: 001
    Nom.......: Sumika
    Prenom....: Kan
    Naissance.: 1951
    Adresse...: 84, rue Isambard
    Un autre ?? ou Q pour Quitter
    
    
    
    Num.......: 003
    Nom.......: Hako
    Prenom....: Shitamura
    Naissance.: 1978
    Adresse...: 90, Place NapolÚon
    Un autre ?? ou Q pour Quitter
    
    
    
    Num.......: 005
    Nom.......: Hoshimi
    Prenom....: Maekawa
    Naissance.: 1973
    Adresse...: 45, rue des Soeurs
    Un autre ?? ou Q pour Quitter
    
    
    
    Num.......: 007
    Nom.......: Sakuratou
    Prenom....: Takayama
    Naissance.: 1957
    Adresse...: 87, rue Michel Ange
    Un autre ?? ou Q pour Quitter
    
    
    
    Num.......: 009
    Nom.......: Sachina
    Prenom....: Fukuoka
    Naissance.: 1970
    Adresse...: 98, Place NapolÚon
    Un autre ?? ou Q pour Quitter
    q
    
    
    
    17/02/2009 18:31:05,25
    C:\DVP~1\COBOL-~1>
    Inspire toi de ça et on se tient au courant.

  13. #13
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Ah non, tant que l'ORGANIZATION IS INDEXED, l'ACCESS SEQUENTIAL est le mode de lecture (suivant la clé primaire) tu auras des enregistrements dans l'ordre de cette clé.
    Hum... Sauf qu'il n'a pas de table index en ce cas...


    Je regarde de suite ton code, enfin je pense que je vais être dérangée par le repas mais je regarde ^^

    Merci beaucoup
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  14. #14
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    ...
    Mais les données du fichier indexé sont illisibles telles quelles.


    Serait-ce une spécificité du compilateur ?
    Ce n'est pas grave, t'occupe pas. Il y a les données des index, des tags, des caractères de contrôle, etc...
    Donc c'est de cela que vous parliez.
    Entre autres, mais ça va s'éclaircir petit à petit.
    Et la seconde partie
    Ce que vous aviez tenté de me faire faire non ?
    Plus ou moins.

    Le problème des fichiers séquentiels ou indexés dépend énormément du compilateur. Il faut simplement s'y adapter. Il y a des compilos qui voient bien les fichiers texte séquentiels même sans le CR. En fait ils tiennent compte du facteur de blocage où plusieurs enregistrements sont à la queue leu leu dans un seul espace, comme un seul enregistrement.

    Edit :

    Laisse tomber le "vous" s'il te plaît.

  15. #15
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Deallyra Voir le message
    Hum... Sauf qu'il n'a pas de table index en ce cas...
    Si si, séquentiel selon la clé : dans l'ordre croissant (ou décroissant d'ailleurs).
    Les enregistrements sont retournés dans l'ordre même si réellement dans le fichier ils ne le sont pas, ce qui est possible, on dit dans ce cas qu'ils sont dans l'ordre d'arrivée (ou consécutifs)

    Bon appétit et bonne soirée.

  16. #16
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Tout d'abord, désolée de ne pas être revenue plus tôt...

    Pour être franche... J'avais oublié le topic jusqu'au moment où j'ai fait le tri des abonnements

    Oublié car j'avais résolu mon problème et je n'étais même pas revenue... Je pourrai dire que j'étais trop prise par les projets et révisions mais bon >.<
    Pas très respecteux.

    Donc mes excuses ^^'



    En ce qui concerne la lecture de mon fichier séquentiel indexé, voici le code fonctionnel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    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
    Merci beaucoup pour tes programmes. Voir le code d'un autre développeur (et plus expérimenté ) permet de s'améliorer ^^

    Des petits automatismes, des raccourcis pratiques pour rendre plus clair le code...

    Chose bête (?), je n'avais pas conscience de l'ouverture/fermeture de plusieurs fichiers.

    Ou la clause INVALID STOP de WRITE

    Donc merci beaucoup ^^

    Résolu
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  17. #17
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Il n'y a pas de quoi me recercier et encore moin de s'excuser . Il m'en faut plus pour m'en faire. Mais ça fait plaisir quand même. Tout accepté.

    A propos du WRITE...INVALID, j'ai mis un STOP "Erreur écriture" pour faciliter les choses, mais normalement on doit gérer ce genre d'erreurs. Dans le cas de WRITE et en fonction des compilos et des OS, ça veut dire fichier plein, plus d'espace de stockage, clé en double, etc....

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

Discussions similaires

  1. Erreur d'index lecture fichier
    Par cabistos dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 05/12/2014, 16h28
  2. [WD15] Lecture fichier foxpro index .cdx
    Par GEOFDEN dans le forum WinDev
    Réponses: 3
    Dernier message: 04/05/2010, 09h09
  3. Réponses: 19
    Dernier message: 09/03/2009, 09h54
  4. Lecture des fichiers INDEX.DAT ?
    Par rpoulin dans le forum Langage
    Réponses: 4
    Dernier message: 02/11/2005, 07h46
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo