dmfdmf
Messages postés38Date d'inscriptionmardi 10 novembre 2009StatutMembreDernière intervention15 avril 2012
-
10 nov. 2009 à 15:58
dmfdmf
Messages postés38Date d'inscriptionmardi 10 novembre 2009StatutMembreDernière intervention15 avril 2012
-
10 nov. 2009 à 22:18
Bonjour à tous,
Voilà, j'ai un fichier texte contenant des valeurs Xdebut Ydebut Xfin Yfin de coordonnées.
comment supprimer les lignes identiques dans les 2 sens soit:
1)une ligne peut être identique à une autre en ayant le début et la fin identiques
2)une ligne peut être identique à une autre en ayant le début et la fin opposés
Pour ce faire, j'ai créé 2 String pour comparer les lignes "LigneA" et LigneB"
enfin mon code :
// ----- detruire les doubles lignes
try {
FileReader fichierGeometrie = new FileReader("./std/dmf.tmp");
BufferedReader buf = new BufferedReader(fichierGeometrie);
String ligne = buf.readLine();
while (ligne!=null){
String[] c = ligne.split(",");
style c[0]; couleur c[1]; Xdebut = c[2]; Ydebut = c[3]; Xfin = c[4]; Yfin = c[5];
String LigneA =(Xdebut+Ydebut+Xfin+Yfin);
while (ligne!=null){
String[] d = ligne.split(",");
ligne = buf.readLine();
style d[0]; couleur d[1]; Xdebut = d[2]; Ydebut = d[3]; Xfin = d[4]; Yfin = d[5];
String LigneB =(Xfin+Yfin+Xdebut+Ydebut);
if (LigneA.equals(LigneB)){System.out.println("LA="+LigneA+" est egale a LB= "+LigneB);}
else {System.out.println("LA="+LigneA+" pas egale a LB= "+LigneB);}
ligne = buf.readLine();
}
ligne = buf.readLine();//---- la boucle s'arrete a la premiere ligne?
}
buf.close();
}catch (Exception err) {
JOptionPane.showMessageDialog(null,"impossible de supprimer la double ligne.");
System.out.println(err);}
// ------------------------------------------ Fin detruire les doubles lignes
la boucle s'arrete a la première ligne sur LigneA
la boucle LigneB fonctionne bien ?
tpoinsot
Messages postés345Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention17 octobre 20144 10 nov. 2009 à 16:56
Bonjour,
Si je traduis en Français, je vois :
Lire LigneA
Lire LigneB
traitement
continuerB jusqu'à la fin
continuerA
Donc tu n'auras qu'une seule ligne A car B va épuiser le fichier.
En clair, tu dis si la première ligne existe d'autres fois.
Tu peux ouvrir ton fichier 2 fois (1 pour A et 1 pour B) mais il faut faire attention de ne pas comparer chaque ligne avec elle-même (tu n'aurais plus rien en résultat)
Moi, je constituerai un tableau avec ce que j'ai lu et je vérifierai si la nouvelle lecture correspond à un élément de mon tableau (ligne déjà rencontrée donc). Tu charges en mémoire mais tu ne lis le fichier qu'une fois.
tpoinsot
Messages postés345Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention17 octobre 20144 10 nov. 2009 à 18:09
mon idée de tableau (ou plutôt une liste) est de faire:
Lire LigneB
LigneB est-elle dans listeDeLigneA?
si oui, traiter
si non, incorporer LigneB à listeDeLigneA
continuer
listeDeLigneA peut être de type ArrayList<String>. Ou tu peux créer une classe X contenant 2 points (x, y) et tu aurais une ArrayList<X>
Et pour te simplifier, incorpore 2 fois chaque ligneB dans la liste, pour tenir compte de l'inversion des points.
Là, faut pas avoir des milliards de lignes de fichier parce que le programme va ramer.
Si tu préfère ouvrir un second buffer, il faut lire les B du début du fichier jusqu'à A non inclus (réponse à : ai-je déjà rencontré ce cas ?) , ou bien lire les B après A jusqu'à la fin (réponse à : vais-je rencontrer ce cas ?). La première solution me semble meilleure.