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 :

Supprimer et flager les enregistrements en double dans un fichier


Sujet :

Cobol

  1. #1
    Membre habitué Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Points : 199
    Points
    199
    Par défaut Supprimer et flager les enregistrements en double dans un fichier
    Bonjour,

    J'essaie d’écrire un pgm cobol qui lit un fichier séquentiel qui est déjà trié sur une clé, mais je fais une impasse sur l'enregistrement qui doit etre supprimé puisque je devrais garder, disons, l'enregistrement avec la date la plus ancienne.

    Merci à l'avance de vos propositions.
    Celui qui n'est pas occupé à naitre, est occupé à mourir (Chapeau Bas Bob Dylan)

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Lemosi Fort et Vert
    Inscrit en
    Mars 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lemosi Fort et Vert
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 8
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    pourrais tu détailler un peu plus ta question, la quantité d'enregistrements par clefs est elle fixe, à partir de quels critères défini-t-on l'ancienneté de l'enregistrement (Y-a-t-il une date de référence) ?

    Ainsi il sera plus facile de faire un choix entre une solution interne au programme ou une solution externe (Emploi de DFSORT/ ICETOOL).

  3. #3
    Membre habitué Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Points : 199
    Points
    199
    Par défaut
    Merci de ta réponse.

    Effectivement l'enregistrement contient un champs date de création et vu les règles métiers on ne peut avoir plus de deux enregistrement redondant.
    Celui qui n'est pas occupé à naitre, est occupé à mourir (Chapeau Bas Bob Dylan)

  4. #4
    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.

    En l'absence de plus de détails et en dehors des utilitaires, et comme on ne peut pas supprimer d'enregistrements dans un fichier séquentiel, la solution consiste à écrire les enregistrements à garder dans un fichier en sortie et, éventuellement, les enregistrements exclus dans un autre fichier en sortie.

  5. #5
    Membre habitué Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Points : 199
    Points
    199
    Par défaut
    Bonjour,

    Oui c'est ce que je fais. Ecrire les enregistrements dans un autre fichier.

    Je boucle sur le fichier, si la clé de l'enregistrement en cours est différente du precédent alors j'envoie ce dernier en reserve vers le fichier de sortie, mais la condition de date qui fait que dans le cas ou les cles sont les memes je ne garde que l'enregistrement avec la date la moins recente. Je bloque sur ce changement d'enregistrement quand la condition se realise.

    A vous lire.

    Merci.
    Celui qui n'est pas occupé à naitre, est occupé à mourir (Chapeau Bas Bob Dylan)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Bonjour, ta question n'est pas très claire. Pourrais-tu nous montrer ton code, auquel cas nous pourrons t'aider. Si ton fichier est correctement trié cela peut être aisé.

  7. #7
    Membre habitué Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Points : 199
    Points
    199
    Par défaut
    Merci pour vos réponse.

    le fichier que j'essaie de traiter contient des enregistrements qui sont triés selon un champs, le but est de sortir un fichier enrichi avec les références qui ne sont pas redondantes dans le fichier source avec un flag "N" dans le fichier destination, et ceux qui sont présents deux fois (On ne peut avoir un enregistrement avec une clé présent plus de deux fois) qu'on ne garde que celui avec le champs date de création le moins récent mettre le flag à "O" et ne pas écrire l'autre enregistrement. dans ma boucle de lecture de fichier j'ai mis le code ci dessous mais je finis chaque fois avec le même nombre d'enregistrements-1

    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
    IF ENR-LUS = 1
        DISPLAY " MISE EN RESERVE POUR LE PREMIER ENREGISTREMENT"
        MOVE W-CURRENT-REC TO W-RESERVE-REC
    ELSE
        IF W-CURRENT-REC-CLE1 = W-RESERVE-REC-CLE1
            IF W-CURRENT-REC-CLE2 NOT = W-RESERVE-REC-CLE2
                IF W-RESERVE-REC-DTCREATION < W-CURRENT-REC-DTCREATION
                    SET W-RESERVE-REC-FLAG-O TO TRUE    
                    WRITE FILE FROME W-RESERVE-REC
                ELSE
                    MOVE W-CURRENT-REC TO W-RESERVE-REC
                    SET W-RESERVE-REC-FLAG-O TO TRUE
                    WRITE FILE FROM W-RESERVE-REC
                END-IF
            END-IF
        ELSE
            SET W-RESERVE-REC-FLAG-N TO TRUE
            WRITE FILE FROM W-RESERVE-REC
            MOVE W-CURRENT-REC TO W-RESERVE-rec
        END-IF
    END-IF
    Celui qui n'est pas occupé à naitre, est occupé à mourir (Chapeau Bas Bob Dylan)

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Le problème dans ton traitement c'est que tu écris systématiquement dans le fichier de sortie. Cela ne correspond pas à ce que tu nous décris. Tu ne dois faire le "WRITE FILE FROM W-RESERVE-REC" que sur l'enregistrement que tu souhaites garder.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 129
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Cela étant, il n'est pas nécessaire d'écrire un programme pour identifier et/ou isoler des n-uplés sur un critère.
    Un outil comme SORT (version CA ou IBM, peu importe) fait ça très bien et c'est très simple à mettre en oeuvre

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 129
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Si toutefois vous préférez ecrire un programme cobol pour cet usage, plutôt qu'utiliser un tri, il faut

    • Tester systématiquement le file status après toute opération d'entrée-sortie
      A noter qu'il ne faut pas planter après l'open si FS <> 00, si l'erreur est grave, le test du file status après le 1er READ ou WRITE permettra de savoir s'il faut ou non planter le traitement
    • éviter de gérer spécifiquement le 1er enregistrement, cette méthode est symptomatique d'une cinématique mal concue :
      plutôt que d'imbriquer des tests, procédez par répétitive imbriquée, c'est bien plus facile à maintenir. La répétitive principale (tant que fichier non terminé) inclut la répétitive sur clef identique etc... en fontion du besoin
    • ne pas coder les ordres d'entrée sortie dans le code principal, ça permet de se concentrer sur le fonctionnel et évite de coder plusieurs fois les mêmes ordres READ et WRITE. Vous avez codé 3 fois le WRITE! Perform est votre ami


    Voici un exemple de code correspondant à votre besoin, ici le fichier doit être trié sur clef croissante ou décroissante, et sur date de création décroissante.
    Cette solution fonctionnera même si vous avez plus de 2 clef identiques

Discussions similaires

  1. Supprimer les lignes en double dans un fichier texte
    Par SilkyRoad dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/05/2017, 15h09
  2. [XL-2003] Supprimer les cellules en double dans une colonne
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/05/2010, 21h49
  3. Réponses: 1
    Dernier message: 05/10/2007, 16h56
  4. requette pour les enregistrements en double
    Par colombe dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/07/2006, 12h28
  5. détecter les enregistrements en double (sur un champ)
    Par Phiss dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/07/2006, 16h59

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