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.
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).
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); } }
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
Partager