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 :

Tri de fichiers sans jcl.


Sujet :

Cobol

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Tri de fichiers sans jcl.
    Bonjour,
    Actuellement en formation cobol, je bute sur l'exercice suivant :
    On dispose de deux fichiers d'entrée triés (suite de nombre triés dans l'ordre croissant) et on souhaite obtenir un fichier de sortie lui aussi trié dans l'ordre croissant, comprenant les deux fichiers d'entrée.
    L'utilisation d'un jcl de tri est interdite.
    Je ne vous demande pas forcément de me donner la solution mais si vous pouviez me donner des pistes de travail, ce serait top car d'après le formateur, c'est quelque chose d'assez simple et buter dessus après de longues heures de réflexion me pose problème.
    Merci d'avance.

  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.

    - dans ton cas, tu peux utiliser l'instruction MERGE
    - tu peux aussi utiliser le tri interne en utilisant l'instruction SORT
    - tu peux aussi rapprocher toi même les deux fichiers en entrée pour construire le fichier en sortie, tu lis séquentiellement les deux fichiers, tu écris l'enregistrement dans le troisième fichier en sortie qui a la plus petite clé et tu le relis tout de suite

    Voir la syntaxe des instructions MERGE et SORT dans la documentation ad hoc de ton compilateur.

    Il y a des exemples de code intéressants dans le forum, cherche, par exemple, les mots clés SORT, MERGE, TRI, RAPPROCHEMENT, etc...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour cette réponse rapide.

    C'est vers la 3ème solution que j'aimerai me diriger. Je comprends le principe mais m'embrouille dans la manière de le coder pour par exemple qu'il ne me ré-ecrive pas à chaque fois la plus petite clé des fichiers d'entrées.
    Cet exercice ne me parle vraiment pas en fait, même en prenant un exemple concret.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 763
    Points : 10 740
    Points
    10 740
    Par défaut
    Bonjour,

    Tu parles de SORT mais tu dis que tes fichiers sont triés ?
    Si tes deux fichiers sont triés il n'y a pas besoin de tri interne programme (cas 3 mentionné dans le post de Hédhili Jaïdane). Il s'agit d'un simple appareillage. Sur quel point bloques-tu précisément ? Tu peux toujours nous faire un copier coller de ton code. Nous pourrons te dire ce qui cloche.

  5. #5
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 056
    Points
    32 056
    Par défaut
    pour surfer sur la réponse de Darkzinus, un exemple de pseudo-code :

    INIT
    clef1 = low-value
    clef2 = low-value

    TRAITEMENT
    Cas FinFichier1 et FinFichier2 : sortir
    Cas FinFichier1 : écrire Fichier2 seul. Lire Fichier2
    Cas FinFichier2 : écrire Fichier1 seul. Lire Fichier1
    Cas Clef1 > Clef2 : écrire Fichier1 seul. Lire Fichier1
    Cas Clef2 > Clef1 : écrire Fichier2 seul. Lire Fichier2
    Cas Clef2 = Clef1 : écrire Fichier2 seul. Lire Fichier2 et Fichier 1

    Avec une sauvegarde de la clef à chaque lecture pour pouvoir comparer. Et une mise à high-value de la clef quand on arrive en fin de fichier. Je n'ai pas mis non plus l'ouverture et la fermeture des fichiers.

    C'est un algo standard d'appariement de fichier. Il existe des variantes avec lecture préliminaire, qui peuvent paraitre plus simples, mais obligent à appeler la lecture à deux endroits différents. Question de style, de préférence personnelle. A noter que la gestion d'autant de cas se fait plus lisiblement par un EVALUATE TRUE qu'une imbrication de IF // END-IF.

    On peut aussi omettre les cas ou il y a une seule fin de fichier si on utilise les high-value. Je les ai mis à fin de compréhension.

    Enfin, faire très attention à bien sortir complètement de la boucle de traitement dès que les 2 fichiers sont entièrement lus, sinon, boucle infinie.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 763
    Points : 10 740
    Points
    10 740
    Par défaut
    Sans oublier la gestion du dernier enregistrement une fois la fin des deux fichiers.
    Et comme le dit si bien el_slapper bien penser à mettre une condition de sortie de boucle "certaine" à savoir fin de fichier.

  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
    Bonjour.

    Pour couper les cheveux en quatre, j'ai oublié une 4è méthode : Sortie dans un fichier indexé

    - lire tout le 1er fichier et écrire ses enregistrements dans un fichier indexé en sortie en accès random ou dynamic.
    - idem pour le 2è fichier.

    Mais le but de l'exercice est bien de faire le rapprochement de deux fichiers dont les enregistrements sont classées selon la même clé.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci bcp pour vos réponses, c'est réglé grace à votre aide !

Discussions similaires

  1. Récupérer un nom de fichier sans extension
    Par OxN dans le forum Général Java
    Réponses: 13
    Dernier message: 01/08/2011, 17h13
  2. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 14h20
  3. [langage] tri de fichier
    Par jj77 dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2004, 17h35
  4. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 17h29
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 16h44

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