OVH Cloud OVH Cloud

[newbies] lecture fichier

2 réponses
Avatar
Samba
Bonsoir, j'ai un fichier qui contient les coordonnées dans l'espace de
points (x, y, z), chaque ligne contient donc trois valeurs réelles, par
exemple:
-0.9364249 -0.3042628 -0.7692308E-01
-0.7965705 -0.5787425 -0.7692308E-01
-0.5787425 -0.7965705 -0.7692308E-01 ...

J'ai besoin de récupérer chaque valeur indépendamment, voici le code que
j'utilise (cf ci dessous), mais dans ma variable "mot" je ne récupère pas
une valeur, mais la valeur de toute la ligne, pourquoi? je ne comprends
pas...

Merci
cf code ci dessous

String chaine, mot;
FileInputStream fichier = new FileInputStream("mon_fichier");
InputStreamReader entree = new InputStreamReader(fichier);
BufferedReader b = new BufferedReader(entree);

// Récupération liste de points
while ((chaine = b.readLine())!= null) {

System.out.println("Liste points");
chaine = b.readLine();

StringTokenizer st = new StringTokenizer(chaine, "");
mot = st.nextToken();

while (st.hasMoreTokens()){
System.out.println(mot);
mot = st.nextToken();
}

chaine = b.readLine();
}

2 réponses

Avatar
Philippe
"Samba" a écrit dans le message de
news:3feb5f9e$0$17127$
Bonsoir, j'ai un fichier qui contient les coordonnées dans l'espace de
points (x, y, z), chaque ligne contient donc trois valeurs réelles, par
exemple:
-0.9364249 -0.3042628 -0.7692308E-01
-0.7965705 -0.5787425 -0.7692308E-01
-0.5787425 -0.7965705 -0.7692308E-01 ...

J'ai besoin de récupérer chaque valeur indépendamment, voici le code que
j'utilise (cf ci dessous), mais dans ma variable "mot" je ne récupère pas
une valeur, mais la valeur de toute la ligne, pourquoi? je ne comprends
pas...

Merci
cf code ci dessous

String chaine, mot;
FileInputStream fichier = new FileInputStream("mon_fichier");
InputStreamReader entree = new InputStreamReader(fichier);
BufferedReader b = new BufferedReader(entree);

// Récupération liste de points
while ((chaine = b.readLine())!= null) {

System.out.println("Liste points");
chaine = b.readLine();

StringTokenizer st = new StringTokenizer(chaine, "");
mot = st.nextToken();

while (st.hasMoreTokens()){
System.out.println(mot);
mot = st.nextToken();
}

chaine = b.readLine();
}


Normal, t'as mis : new StringTokenizer(chaine, "")
Donc ton délimiteur est "", donc rien.
Conséquence, il te prends toute la ligne dans le premier mot !

De plus, j'ai l'impression que tu lis 1 ligne sur 3 ...
Et enfin, ça risque de planter si t'as rien sur une ligne :
lecture du premier mot sans test !

Essaie plutôt :

<CODE>
String chaine, mot;
FileInputStream fichier = new FileInputStream("mon_fichier");
InputStreamReader entree = new InputStreamReader(fichier);
BufferedReader b = new BufferedReader(entree);

// Récupération liste de points
while ((chaine = b.readLine())!= null) { // lecture d'une ligne

System.out.println("Liste points");

StringTokenizer st = new StringTokenizer(chaine);
// découpage standard

while (st.hasMoreTokens()){ // encore un mot ?
mot = st.nextToken(); // ok je prend !
System.out.println(mot);
}
}
</CODE>

Avatar
Samba
Merci, j'ai réglé le problème grace à la fonction split du package
java.util.regex