# Java: Lecture d'un fichier



## Steph-24 (8 Mars 2007)

Dans le cadre d'un projet sur la théorie des graphes à implémenter, je dois arriver à lire des informations contenu dans un fichier, à partir de mon application java.

Voilà un morceau du fichier à lire : 



> 1 3 45 25 4  2 3 53 20 4  3 3 98 17 4  4 4 11 15 4
> 5 5 8 42 5  6 6 94 20 4  7 6 96 60 3  8 7 8 12 4
> 9 7 17 85 4  10 8 5 42 5  11 8 7 12 4  12 8 9 8 4
> 13 9 8 8 4  14 9 10 48 3  15 10 9 48 3  16 10 11 12 4
> 17 10 12 34 4  18 11 4 15 4  19 11 10 12 4  20 11 29 45 5



En fait, c'est pas très visible, mais chaque ligne contient 4 blocs de 5 nombres. *(les nombres sont séparés par 1 espace et les blocs pas 2 espaces)*
Ce que je dois faire, c'est récupérer les 5 nombres du premier bloc, les stockés dans différents tableaux, et ensuite passer au bloc suivant. Et ainsi de suite.

J'arrive à accéder au fichiers, et à afficher son contenu, mais j'ai du mal à trouver une méthode simple pour accéder facilement à chaque nombre.

Donc si quelqu'un a une idée...

Merci


----------



## p4bl0 (8 Mars 2007)

Steph-24 a dit:


> Dans le cadre d'un projet sur la th&#233;orie des graphes &#224; impl&#233;menter, je dois arriver &#224; lire des informations contenu dans un fichier, &#224; partir de mon application java.
> 
> Voil&#224; un morceau du fichier &#224; lire :
> 
> ...


je ne connais pas Java, mais en parsant le contenu du fichier avec des regular expressions &#231;a devrait marcher


----------



## Macoute (8 Mars 2007)

Suffit d'utiliser String [] split(regex) de la classe String.
Avec la regex pour un ou deux espaces, et tu récupèreras un ensemble de nombres ou chaque nombre.
Apres un simple convertion de chaine vers nombre.


----------



## Steph-24 (8 Mars 2007)

J'ai un peu chercher mais je ne comprend pas vraiment comment utiliser la méthode Split


----------



## p4bl0 (8 Mars 2007)

Steph-24 a dit:


> J'ai un peu chercher mais je ne comprend pas vraiment comment utiliser la méthode Split


si c'est pareil qu'en PHP ou en Perl, la m&#233;thode prend deux arguments :
le premier est une regexp qui doit matcher le sp&#233;arateur (donc un espace ou deux dans ton cas),
le second est le texte auquel tu va appliquer le split, mais peut-&#234;tre qu'en java ce texte est avant genre text.split('/ {1,2}/'); ou alors split('/ {1,2}/', text);


----------



## Macoute (8 Mars 2007)

split() est une méthode de la classe String, donc:

String ma_chaine;


String [] num = ma_chaine.split(regex);


----------



## molgow (8 Mars 2007)

Mieux que la m&#233;thode split(), je te conseille plut&#244;t de regarder du c&#244;t&#233; de la classe StreamTokenizer (ou &#233;ventuellement StringTokenizer en faisant une lecture ligne par ligne, c'est la solution entre split et StreamTokenizer). L'avantage est que tu peux directement r&#233;cup&#233;rer la valeur num&#233;rique et que tu utilises une API de plus haut niveau que la m&#233;thode de java.lang.String.


----------



## Macoute (8 Mars 2007)

Effectivement, y aussi la solution du tokenizer.
J'y pensais même plus.


----------



## Steph-24 (9 Mars 2007)

molgow a dit:


> Mieux que la méthode split(), je te conseille plutôt de regarder du côté de la classe StreamTokenizer (ou éventuellement StringTokenizer en faisant une lecture ligne par ligne, c'est la solution entre split et StreamTokenizer). L'avantage est que tu peux directement récupérer la valeur numérique et que tu utilises une API de plus haut niveau que la méthode de java.lang.String.



J'ai essayé d'utiliser la méthode StreamTokenizer mais je n'arrive pas à l'exploiter.
Est-ce que tu pourrais me donner un exemple ?


----------



## molgow (9 Mars 2007)

J'ai tout de m&#234;me dit une mini-b&#234;tise avant. L'utilisation de StringTokenizer est d&#233;courag&#233;e par l'API : 


> StringTokenizer is a legacy class that is retained for  compatibility reasons although its use is discouraged in new code. It is  recommended that anyone seeking this functionality use the split  method of String or the java.util.regex package instead.



Voici un exemple d'utilisation de StreamTokenizer. Autrement, il suffit de lire le javadoc.


----------



## Steph-24 (9 Mars 2007)

Merci pour l'exemple ! Je pense qu'avec ça, je devrais m'en sortir.


----------

