Stocker un fichier texte avec des "|" dans une arrayList [Résolu]

Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Dernière intervention
13 août 2012
- 22 juil. 2009 à 15:10 - Dernière réponse :
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Dernière intervention
13 août 2012
- 23 juil. 2009 à 11:57
Bonjour,
Voici mon problème:
- Je cherche à ouvrir un fichier .txt (c'est OK)
- A charger son contenu et à découper la chaîne de caractère.
La structure du fichier texte est le suivant:
7.3|-1.2|1.8|.....
10|-2
10|-1|3.1|4.5|...
-5|-3
2.5|-2.5
15|-5
(...)
(il s'agit de coordonnées x et y pour générer des points sous JFreeChart par la suite)
En gros, je voudrais:
- récupérer la partie à gauche du pipe et la stocker dans une première ArrayList.
- récupérer la partie à droite du pipe et la stocker dans une deuxième ArrayList
- et ainsi de suite jusqu'à temps que la ligne se termine. Une fois le retour à la ligne effectué, recommencer les opérations écrites ci-dessus.

Je passe par une ArrayList car je ne connais pas les dimension de chaque ligne cad que chaque ligne n'aura pas le même nombre de paramètre mais c'est uniquement les deux premier élément rencontré sur la ligne qui m'intéresse (le reste n'étant pas à exploiter).
Le format du fichier txt m'est imposé sous cette forme.

De mon coté j'ai bien évidement cherché et je n'ai encore trouvé aucune solution qui me convienne.

Voici le peu de source que j'ai:
public ArrayList FichierTexte;
(...)
public void ChargerFichier(String file)
{
try
{
BufferedReader br = new BufferedReader(new FileReader(file));
try
{
String mot;
while ((mot=br.readLine())!=null )
{
FichierTexte.add(mot);
}
System.out.println(FichierTexte);
}
finally
{
br.close();
}
}
catch(IOException e)
{
System.out.println((new StringBuilder()).append("Une operation sur " +
"les fichiers a leve l'exception ").append(e).toString());
} /*

try
{
//BufferedReader br=new BufferedReader(new FileReader("Graphe.txt"));
BufferedReader br = new BufferedReader(new FileReader(file));
try
{
String ligne;
//creation arrays
String[] arrayString;
int[] arrayint;
int indexLigne = 0;

arrayString = new String[6]; // a redimensionner avec le nombre de ligne exact
arrayint = new int[6];

while ((ligne=br.readLine())!=null )
{
String[] elements = ligne.split("|");
arrayString[indexLigne] = elements[0];
arrayint[indexLigne] = Integer.parseInt(elements[1]);
indexLigne++;
}
}
finally
{
br.close();
}
}
catch (Exception e)
{
System.out.println(e.toString());
} */
}

La partie commenté correspondant à une recherche du net.

Apparemment, dans mes recherche, je retrouve souvent l'utilisation de la fonction split() ou encore de StringTokenrer (ou un truc dans le genre).

Je précise que je code uniquement en Delphi et que j'ai que 3 mois de pratique sous Java...
(On me donne ce sujet sous java pour tuer le temps vu qu'il me reste que deux semaine avant de terminer mon contrat d'apprentissage et que j'ai fini tout mes projet... Cette demande provient quand même du PDG donc faut pas que je traine!)

D'avance merci pour votre aide!
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Dernière intervention
13 août 2012
22 juil. 2009 à 15:35
3
Merci
bon, j'ai essayé décrire quelque chose qui ressemble à ça:

public void ChargerFichier(String file)
{
try
{
BufferedReader br = new BufferedReader(new FileReader(file));

try
{
String ligne = null;
while ((ligne=br.readLine())!=null )
{
ligne=ligne.trim();
StringTokenizer val = new StringTokenizer(ligne,"|");
while(val.hasMoreTokens())
{
FichierTexte.add(Integer.parseInt(val.nextToken()));
System.out.println(FichierTexte);
}
}
}
finally
{
br.close();
}
}
catch(IOException e)
{
System.out.println((new StringBuilder()).append("Une operation sur les fichiers a leve l'exception ").append(e).toString());
}


A la compile j obtient:

Exception in thread "main" java.lang.NumberFormatException: For input string: "7.3"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:458)
at java.lang.Integer.parseInt(Integer.java:499)
at generationgraphecalcul.CFichierTexte.ChargerFichier(CFichierTexte.java:46)
at generationgraphecalcul.CMain.main(CMain.java:164)
Java Result: 1


Suis-je suis la bonne voie? Quelle est mon erreur à votre avis?
Aidez-moi svp la je commence à désespérer...

Merci Wiska 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Wiska
Meilleure réponse
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Dernière intervention
13 août 2012
22 juil. 2009 à 15:50
3
Merci
bon déjà, je vient de percuter que le traitement que je lance se fait sur des entier et non sur des flottant... A ce moment la comment adapter le traitement à mon cas?

Merci Wiska 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Wiska
Meilleure réponse
22 juil. 2009 à 18:46
3
Merci
Salut,

Si le fichier n'est pas imposé, corrige le en n'y mettant que des entiers et tu iras un peu plus loin.

Cordialement,


...\ Dan /...

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Dernière intervention
13 août 2012
23 juil. 2009 à 09:20
3
Merci
Le problème c'est que le format est imposé...

De mon coté, j'ai un peu avancé:

public void ChargerFichier(String file)
{
try
{
BufferedReader br = new BufferedReader(new FileReader(file));

try
{
String ligne = null;
String buf = null;
while ((ligne=br.readLine())!=null )
{
ligne=ligne.trim();
System.out.println("ligne="+ligne);
StringTokenizer val = new StringTokenizer(ligne,"|");
while(val.hasMoreTokens())
{
buf = val.nextToken();
FichierTexte.add(Float.parseFloat(buf));
// FichierTexte.add(Float.parseFloat(val.nextToken()));

}
for (int i=0; i<FichierTexte.size();i++)
System.out.println("Contenu ArrayList = "+FichierTexte.get(i)+"\n");
}
}
finally
{
br.close();
}
}
catch(IOException e)
{
System.out.println((new StringBuilder()).append("Une operation sur les fichiers a leve l'exception ").append(e).toString());
}

et le résultat de la compile donne ceci:

ligne=7|-1
Contenu ArrayList = 7.0
Contenu ArrayList = -1.0
ligne=10|-2
Contenu ArrayList = 7.0
Contenu ArrayList = -1.0
Contenu ArrayList = 10.0
Contenu ArrayList = -2.0
ligne=10|-1
Contenu ArrayList = 7.0
Contenu ArrayList = -1.0
Contenu ArrayList = 10.0
Contenu ArrayList = -2.0
Contenu ArrayList = 10.0
Contenu ArrayList = -1.0
ligne=-5|-3
Contenu ArrayList = 7.0
Contenu ArrayList = -1.0
Contenu ArrayList = 10.0
Contenu ArrayList = -2.0
Contenu ArrayList = 10.0
Contenu ArrayList = -1.0
Contenu ArrayList = -5.0
Contenu ArrayList = -3.0
ligne=2|-2
Contenu ArrayList = 7.0
Contenu ArrayList = -1.0
Contenu ArrayList = 10.0
Contenu ArrayList = -2.0
Contenu ArrayList = 10.0
Contenu ArrayList = -1.0
Contenu ArrayList = -5.0
Contenu ArrayList = -3.0
Contenu ArrayList = 2.0
Contenu ArrayList = -2.0
ligne=15|-5
Contenu ArrayList = 7.0
Contenu ArrayList = -1.0
Contenu ArrayList = 10.0
Contenu ArrayList = -2.0
Contenu ArrayList = 10.0
Contenu ArrayList = -1.0
Contenu ArrayList = -5.0
Contenu ArrayList = -3.0
Contenu ArrayList = 2.0
Contenu ArrayList = -2.0
Contenu ArrayList = 15.0
Contenu ArrayList = -5.0

Perso, je suis pas très convaincu par mon traitement.
Je n'ai pas l'impression qu'il stocke 1 par 1 les éléments de la ligne dans l'ArrayList mais 2 par 2...
Quelqu'un pourrait-il le commenter voir me conseiller pour le rendre plus optimisé?

Merci Wiska 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Wiska
Meilleure réponse
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Dernière intervention
13 août 2012
23 juil. 2009 à 11:57
3
Merci
C bon j'ai fini par trouver... seul...
Hormis l'aiguillage de damino, merci d'avoir participé à mon long monologue....

Voici le code pour ceux que sa intéresse...
-première classe:

public ArrayList FichierTexte;
public int TailleArrayList;
(...)
public void ChargerFichier(String file)
{
try
{
BufferedReader br = new BufferedReader(new FileReader(file));

try
{
String ligne = null;
String buf = null;
System.out.println("Taille ArrayList = "+TailleArrayList);
while ((ligne=br.readLine())!=null )
{
ligne=ligne.trim();
StringTokenizer val = new StringTokenizer(ligne,"|");
while(val.hasMoreTokens())
{
buf = val.nextToken();
FichierTexte.add(Float.parseFloat(buf));
System.out.println("ligne Texte en traitement : "+ligne);
TailleArrayList++;
System.out.println("Taille ArrayList = "+TailleArrayList);
}
}
}
finally
{
br.close();
}
}

- classe principale:

public static void main(String args[])
{
//float[] ad3;
//float[] ad4;
ArrayList ad3;
ArrayList ad4;

// ad3 = new float[20];
//ad4 = new float[20];
ad3 = new ArrayList();
ad4 = new ArrayList();

CFichierTexte file = new CFichierTexte();
file.ChargerFichier("C:\\Documents and Settings\\phtorka\\Bureau\\GenerationGrapheCalcul\\GenerationGrapheCalcul\\Graphe.txt");

for (int i=0; i<file.FichierTexte.size();i+=2)
{
System.out.println("Contenu FichierTexte = "+file.FichierTexte.get(i)+"\n");
ad3.add(file.FichierTexte.get(i));
}
for (int x=0; x<ad3.size();x++)
System.out.println("Contenu ad3 = "+ad3.get(x)+"\n");

for (int j=1; j<file.FichierTexte.size();j+=2)
{
System.out.println("Contenu FichierTexte = "+file.FichierTexte.get(j)+"\n");
ad4.add(file.FichierTexte.get(j));
}
for (int y=0; y<ad4.size();y++)
System.out.println("Contenu ad4 = "+ad4.get(y)+"\n");
}

résultat compile:

Taille ArrayList = 0
ligne Texte en traitement : 7.1|-1.2
Taille ArrayList = 1
ligne Texte en traitement : 7.1|-1.2
Taille ArrayList = 2
ligne Texte en traitement : 10.0|-2.0
Taille ArrayList = 3
ligne Texte en traitement : 10.0|-2.0
Taille ArrayList = 4
ligne Texte en traitement : 10.0|-1.5
Taille ArrayList = 5
ligne Texte en traitement : 10.0|-1.5
Taille ArrayList = 6
ligne Texte en traitement : -5.0|-3.0
Taille ArrayList = 7
ligne Texte en traitement : -5.0|-3.0
Taille ArrayList = 8
ligne Texte en traitement : 2.5|-2.5
Taille ArrayList = 9
ligne Texte en traitement : 2.5|-2.5
Taille ArrayList = 10
ligne Texte en traitement : 15.0|-5.0
Taille ArrayList = 11
ligne Texte en traitement : 15.0|-5.0
Taille ArrayList = 12

Contenu FichierTexte = 7.1
Contenu FichierTexte = 10.0
Contenu FichierTexte = 10.0
Contenu FichierTexte = -5.0
Contenu FichierTexte = 2.5
Contenu FichierTexte = 15.0

Contenu ad3 = 7.1
Contenu ad3 = 10.0
Contenu ad3 = 10.0
Contenu ad3 = -5.0
Contenu ad3 = 2.5
Contenu ad3 = 15.0

Contenu FichierTexte = -1.2
Contenu FichierTexte = -2.
Contenu FichierTexte = -1.5
Contenu FichierTexte = -3.0
Contenu FichierTexte = -2.5
Contenu FichierTexte = -5.0

Contenu ad4 = -1.2
Contenu ad4 = -2.0
Contenu ad4 = -1.5
Contenu ad4 = -3.0
Contenu ad4 = -2.5
Contenu ad4 = -5.0

Merci Wiska 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Wiska

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.