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

Entrée/Sortie Java Discussion :

trier un fichier Texte


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 84
    Points : 63
    Points
    63
    Par défaut trier un fichier Texte
    Bonsoir,

    j'ai un fichier texte contenant des enregistrements (chaque enregistrement (ligne de 160 caracteres) est un ensemble de champs de longueurs définies).

    j'aimerais pouvoir trier ce fichier par rapport à un champ particulier.

    ce que j'ai fait:

    j'ai crée une classe IndexMotNL (une sorte d'index contenant le mot (champ de tri et le numéro de la ligne contenant ce mot dans le fichier texte). la classe IndexMotNL implemente l'interface Comparable. tout celà est dans le but de pouvoir trier les mots (champ) en gardant le numéro de la ligne le contenant.

    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
     
    class IndexMotNL implements Comparable {
    private String mot;
    private int numeroLigne;
     
    public IndexMotNL(String s, int nl) {
    mot = s;
    numeroLigne = nl;
    }
     
    //getters et setters de mot et numeroLigne (getMot(), setMot(String m), ....)
     
    public int compareTo(Object o) {
    String mot1 = (IndexMotNL) o.getMot();
    String mot2 = this.getMot();
     
    return mot2.compareToIgnoreCase(mot1);
    }
     
    }
    dans la classe principale, je parcours le fichier texte et je remplis une ArrayList avec des objets IndexMotNL (le champ de tri + le numero de la ligne contenant ce champ).
    ensuite je tri la liste (Collections.sort(maListe));
    maListe contient les objets IndexMotNL trié suivant l'ordre croissant des attribut mot.

    l'idée est de pouvoir accéder à une ligne de numéro donné dans le fichier texte pui l'écrire dans un autre fichier texte.
    exemple:
    supposons maListe triee est la suivante:

    AA 5
    ABD 2
    BG 4
    MS 1
    PR 3

    il faut pouvoir accéder à la ligne n° 5, la lire et l'écrire sur un nouveau fichier texte. puis la ligne n°2, la ligne n°4, la ligne n°1 enfin la ligne n°3.

    la méthode la plus couteuse est d'ouvrir le fichier texte, le lire ligne par ligne jusqu'à atteindre la ligne voulue, la lire et l'écrire et fermer le fichier. l'ouvrir, le lire ligne par ligne ...

    j'aimerais savoir si il ya une méthode plus optimisée pour faire celà.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    Si ton fichier n'est pas trop volumineux, tu peux carrément charger toute la ligne dans l'ArrayList. Ensuite, il ne reste plus qu'à trier, et à sauver dans un fichier.

    Nicolas

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 62
    Points : 75
    Points
    75
    Par défaut
    Si tu veux aller plus rapidement en ce qui concerne la lecture de ton fichier tu peu utiliser la classe Scanner mais verifie avant que tu utilise une version java5 sinon je n'ai pas tres bien compris ton problemme si ta question porte plus sur le trie j'ai regarder un peu ton code tu peu faire comme dit plus haut c'est une bonne solution.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 84
    Points : 63
    Points
    63
    Par défaut
    la taille du fichier est variable.

    pour le moment la taille des fichiers ne dépasse pas 10 Mo.

    c'est ce matin que j'ai pensé à charger toutes les lignes dans l'ArrayList et surcharger la méthode compareTo car le tri doit se faire sur une partie de la ligne entre le caractère 31 et 54.

    j'ai pensé aussi de passer par un SGBD puisque la taille de chaque ligne est fixée à 160 caractères. chaque ligne est composée de 14 champs:
    le champ A (caractères entre 1 et 2 de la ligne)
    le champ B (entre 3 et 4 )
    le champ C (entre 5 et 12)
    le champ D (entre 13 et 18)
    le champ E (entre 19 et 30)
    le champ F (entre 31 et 54)
    le champ G (entre 55 et 78)
    le champ H (entre 79 et 86)
    le champ I (entre 87 et 91)
    le champ J (entre 92 et 102)
    le champ K (entre 103 et 118)
    le champ L (entre 119 et 149)
    le champ M (entre 150 et 154)
    le champ N (entre 155 et 160)

    le champ sur lequel le tri se fera est le champ F.

    dans le SGBD je crée une table de 14 champs et chaque ligne lue sera stockée dans cette table.
    à la fin de la lecture je lance la requete SQL suivante sur la table:

    SELECT * from maTable GROUP BY maTable.F ASC;

    ensuite je récupère le résultat de la requete et l'écrire dans le fichier cible ligne par ligne.

    mais c'est un peu lourd.

    c'est pour ça je vais opter pour la première solution. à moins qu'il y a une autre proposition plus optimisée.

    Merci

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

Discussions similaires

  1. [Batch] Trier des nombres ordre croissant dans fichier texte
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 20
    Dernier message: 01/11/2009, 10h22
  2. [Turbo Pascal] Trier des nombres saisis dans un fichier texte
    Par rasedra dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 30/07/2008, 10h12
  3. Trier un fichier texte sur un champs précis
    Par jacko2 dans le forum Général Java
    Réponses: 3
    Dernier message: 14/04/2008, 09h58
  4. Réponses: 2
    Dernier message: 19/09/2006, 21h34
  5. Comment trier un fichier texte ?
    Par partner35000 dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2006, 12h35

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