[JAVA] éliminer la redondance dans un fichier texte !

éliminer la redondance dans un fichier texte ! [JAVA] - Java - Programmation

Marsh Posté le 28-01-2004 à 20:11:33    

Salut quel est le moyen le plus simple d'éliminer la redondance en JAVA dans un fichier texte du type suivant :  
 
L2B0200_A16_DLS132_064.ab1  CHROMAT_FILE: L2B0200_A16_DLS132_064
L2B0205_N07_DLS144_020.ab1  CHROMAT_FILE: L2B0205_N07_DLS144_020
L2B0202_B09_DLS134_047.ab1  CHROMAT_FILE: L2B0202_B09_DLS134_047
L2B0204_C17_DLS146_077.ab1  CHROMAT_FILE: L2B0204_C17_DLS146_077
L2B0202_B09_DLS134_047.ab1  CHROMAT_FILE: L2B0202_B09_DLS134_047
.
.
.
L2B0204_C17_DLS146_077.ab1  CHROMAT_FILE: L2B0204_C17_DLS146_077
 
 
c'est a dire enlever toutes les lignes quis ont identiques
 
Bon moi j'ai pensé a ça mais je n'ai aps testé je veux juste savoir si y a pas de meilleur méthode ce qui m'embête c de fixer une valeur a b.mark(valeur)
 

Code :
  1. public static void Deredonder(String cheminEntree) throws FileNotFoundException, IOException {
  2.  FileReader f = new FileReader(cheminEntree);
  3.  BufferedReader b = new BufferedReader(f);
  4.  FileWriter fw = new FileWriter(FenetreBlast.cheminSaveSeq2, false);
  5.  PrintWriter pw = new PrintWriter(fw);
  6.  String ligneLue = "";
  7.  String ligneLue1 = "";
  8.  while(ligneLue != null) {
  9.   ligneLue = b.readLine() ;
  10.   b.mark(30000) ;
  11.   ligneLue1 = b.readLine() ;
  12.   while(ligneLue1 != null && !ligneLue.equals(ligneLue1)){
  13.    if(!ligneLue.equals(ligneLue1)){
  14.     pw.println(ligneLue) ;
  15.    }
  16.    ligneLue1 = b.readLine() ;
  17.   }
  18.   b.reset() ;
  19.  }
  20. b.close() ;
  21. pw.close() ;
  22. }


 
 
merci

Reply

Marsh Posté le 28-01-2004 à 20:11:33   

Reply

Marsh Posté le 28-01-2004 à 20:31:04    

Il est gros ton fichier ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 28-01-2004 à 20:44:43    

Est-ce que l'ordre des lignes doit être conservé?
Si l'ordre n'est pas important, alors il suffit de placer les lignes les unes après les autres dans un Set.
Un Set garantit qu'on n'a aucun doublon.

Code :
  1. public static void deredonder(String cheminEntree) throws FileNotFoundException, IOException {
  2. FileReader f = new FileReader(cheminEntree);
  3. BufferedReader b = new BufferedReader(f);
  4. FileWriter fw = new FileWriter(FenetreBlast.cheminSaveSeq2, false);
  5. PrintWriter pw = new PrintWriter(fw);
  6. Set resultat = new HashSet();
  7. String ligne = b.readLine();
  8. while (ligne!=null) {
  9.   resultat.add(ligne);
  10.   ligne = b.readLine();
  11. }
  12. for (Iterator it = resultat.iterator(); it.hasNext();)
  13.   pw.println(it.next());
  14. b.close();
  15. pw.close();
  16. }


Message édité par Bufff le 28-01-2004 à 20:46:33
Reply

Marsh Posté le 28-01-2004 à 20:50:26    

ben le probleme c que c variable mais il ne sera jamais tres gros je le situe dans les environs de maximum 1000 lignes de 50 caracteres...
 
cela change t'il qqchose?

Reply

Marsh Posté le 28-01-2004 à 22:10:26    

Bufff a écrit :

Est-ce que l'ordre des lignes doit être conservé?
Si l'ordre n'est pas important, alors il suffit de placer les lignes les unes après les autres dans un Set.
Un Set garantit qu'on n'a aucun doublon.

Code :
  1. public static void deredonder(String cheminEntree) throws FileNotFoundException, IOException {
  2. FileReader f = new FileReader(cheminEntree);
  3. BufferedReader b = new BufferedReader(f);
  4. FileWriter fw = new FileWriter(FenetreBlast.cheminSaveSeq2, false);
  5. PrintWriter pw = new PrintWriter(fw);
  6. Set resultat = new HashSet();
  7. String ligne = b.readLine();
  8. while (ligne!=null) {
  9.   resultat.add(ligne);
  10.   ligne = b.readLine();
  11. }
  12. for (Iterator it = resultat.iterator(); it.hasNext();)
  13.   pw.println(it.next());
  14. b.close();
  15. pw.close();
  16. }




 
au pire t'y ajoutes une variable d'ordre

Reply

Marsh Posté le 28-01-2004 à 23:04:01    

a priori l'ordre n'a pas d'importance merci bien je vous remercie je suis debutant alors il va falloir que je digère un peu le coup du :
 
     for (Iterator it = resultat.iterator(); it.hasNext();)  
 
ca sort d'ou?

Reply

Marsh Posté le 28-01-2004 à 23:28:01    

sort < fichier | uniq :D
 
pour la variable d'ordre pour avoir un tri stable, faut utiliser la méthode DSU (bien connu des programmeurs python) Decorate-Sort-Undecorate.
 
ça ajoute juste N à ta complexité ce qui est peu. en gros avant de tout balancer dans le hashset, il faut tranformer les entrées
 
data -> [data, indice] -> traitement -> data
 
et le voilà ton tri stable.

Reply

Marsh Posté le 28-01-2004 à 23:31:02    

arf...
 
faudrait que je m'achète un bon bouquin d'algoritmie ou de maths appliquées à la prog...les algos dans ce style faut maitriser je pense...
 
-->sinon oui si ct une db en sql c torché en une requete...


Message édité par Jubijub le 28-01-2004 à 23:31:39

---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 28-01-2004 à 23:32:16    

roievil a écrit :

ben le probleme c que c variable mais il ne sera jamais tres gros je le situe dans les environs de maximum 1000 lignes de 50 caracteres...
 
cela change t'il qqchose?


oui : t'es fichiers sont relativement petit donc tu peux te permettre de stocker toutes les lignes en mémoire (dans un set par exemple comme le disait buff)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed