Hagakure13
Messages postés5Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention19 avril 2007
-
15 avril 2007 à 23:33
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
19 avril 2007 à 20:24
Bonjour à tous
Voilà, j'ai un problème avec le StreamTokenizer ...
En fait, j'ai un bout de données (que je lis dans un fichier mais ca j'y arrive encore) :
En fait plus specifiquement, on a 5 nombres separer par un espace puis un double espace.
Ce que je voudrais faire c'est entré les 5 nombres dans des variables (ca c'est facile...) mais je voudrais recommencer la mm operation des qu'on a un double espace....
Je m'explique!
FileReader rd = new FileReader( "filename.java");
StreamTokenizer st=new StreamTokenizer(rd);
while (token != StreamTokenizer.TT_EOF) {
while (// pas de double espace) {
if (StreamTokenizer.TT_NUMBER){
bidon=st.nextToken(); //premier nombre
c[st.nextToken()][st.nextToken()]=st.nextToken(); // deuxieme, troisieme et quatrieme nombre
vitesse=st.nextToken(); // cinquieme nombre
// est-ce que si token n'est pas un nombre il passe au suivant ?
}
}
Si deja vous arrivez jusqu'ici je vous en remercie beaucoup
En fait le debut du fichier est un peu plus compliqué^^...
A la premiere ligne, on a des doubles espaces... autrement dit, ce que j'ai marqué au dessus ne compte pas pour la premiere ligne :/
Donc comment faire J'avais pensé a definir un nombre de Token mais j'ai vu que la fonction n'existe pas en StreamTokenizer :/
Je pensais aussi utiliser un StringTokenizer :/ Autrement dit, on coupe le fichier en ligne grave au StreamTokenizer et ensuite on l'analyse avec un StringTokenizer... bon d'accord c'est du rafistolage mais bon^^ (je prefererais quand mm avoir une solution pour la premiere proposition).
Voila, d'avance merci beaucoup pour votre aide :)
ps : j'ai bien vu pleins de codes et algo mais je ne comprend vraiment pas ce qu'il faut utiliser pour définir un "bloc" dans une ligne
Hagakure13
Messages postés5Date d'inscriptionlundi 13 novembre 2006StatutMembreDernière intervention19 avril 2007 17 avril 2007 à 12:52
Bon comme personne ne poste, je vais le faire moi-meme ... Apres deux dur journées de labeur, j'ai pu pondre ça, qui m'avait l'air assez correct... Seul probleme, je tombe sur un "number not found" :/ Donc si quelqu'un aurait une explication (parce que dans le fichier lu, il y a des nombres ca c'est sur )... Voici le code :
public static void LectureNet(String file_name, int max_number_nodes, int max_number_arcs, int[][] matrix, int[] vitesse) throws IOException {
File data=new File(""+file_name+"");
FileReader rd = new FileReader(data);
StreamTokenizer st = new StreamTokenizer(rd);
int number_arc=0;
boolean fin=false;
// First Line
int[] average_speed=new int[4];
if (st.ttype==StreamTokenizer.TT_NUMBER) {
max_number_nodes=(int) st.nval;
max_number_arcs=(int) st.nval;
for (int i=0; i<5; i++)
average_speed[i]=(int) st.nval;
}
while (number_arc<=max_number_arcs){
while (!fin){
switch (st.ttype) {
case StreamTokenizer.TT_NUMBER :
number_arc=(int) st.nval;
matrix[(int) st.nval][(int) st.nval]=(int) st.nval;
vitesse[number_arc]=(int) st.nval;
fin=true;
break;
default :
System.out.println("Error : no number found! ");
}
}
}
}
Merci d'avance pour votre aide^^ (qui serat peut etre nombreuse et mouvementée, s'est-on jamais!
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 17 avril 2007 à 21:22
Salut:
J'ai jetté un coup d'oeil sur ton code, mais je n'ai pas vu la méthode nextToken ().
La forme de la boucle:
while (true) {
int ttype = st.nextToken ();
if (ttype == StreamTokenizer.TT_NUMBER) {
// CECI EST UN NOMBRE
// TRAITEMENTS A FAIRE
}
else if (ttype == StreamTokenizer.TT_EOF) {
break;
}
}
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 19 avril 2007 à 20:24
Salut:
Autre chose à faire avant d'utiliser StreamTokenizer et d'initialiser ce qu'on appelle "la table syntaxique".
Exemple:
FileReader fileReader = new FileReader ("data.txt");
StreamTokenizer st = new StreamTokenizer (fileReader);
// Initialiser table syntaxique
st.commentChar ('#'); // Tout ce qui vient après un # est un commentaire
st.parseNumbers (); // Pour parser les nombres
// VOIR DOCUMENTATION POUR PLUS D'INFORMATIONS
// ...
________________________________________________________________________________
A.B. :
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"