Detecter separateur ; dans un fichier TXT

Résolu
tomski Messages postés 48 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 24 décembre 2009 - 12 févr. 2009 à 11:14
Wiska Messages postés 15 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 13 août 2012 - 22 juil. 2009 à 13:50
Bonjour!

Jaimerais lire un fichier .TXT en java presenté sous la forme

TOTO
prob1;val1
prob2;val2
prob3;val3

"prob" est un String, "val "un int.

Ce que je ne sais pas faire cest:
   Stocker la String TOTO dans une String speciale (ca ok je gere), mais comment faire pour le reste du fichier?
   je voudrais:
   detecter le separateur ;
   Stocker la String prob1, prob2... dans larray de String qui va bien, et l'int dans larray de int
   et trouver la valeur max des int

Si quelqu un peut maider ce serait cool.

(_.:~:._)

9 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
13 févr. 2009 à 09:12
Salut,

Si c'est aussi simple, te prends pas la tête : utilise un String.split(";");
______________________________________
DarK Sidious
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
13 févr. 2009 à 14:02
Salut,

Oulà là, tu te complique bien la vie pour rien !

Pas testé, mais ca devrait marcher :

Heu,  si quelquun veut bien encore maider...
Ce que jessaye de faire: jai un fichier texte en entrée qui sappelle input.txt et qui contient des valeurs comme ceci:
Etiquette;50
Papier;20
..; ..

Je cherche a ranger Etiquette et Papier et n... dans un Array de String.
et les valeurs dans un array de int

Pour
cela, grace au tip de DarkSidious, je cherche le ";" dans ma string via
un split, ensuite de prends les substring avant et apres le ";".

Le probleme doit etre certainement au niveau de ma boucle for ou while.
Si quelquun peut maider a decoder ce ki  ne va pas dans mon code... ce serait top mega cool.
Ensuite
une fois ke mes arrays seront bien remplis, je piocherai dedans pour
creer des JLabels avec pour nom/valeur le contenu des arrays a lindex
i. (Jessaye de faire un graphe)

Quand jexecute le code suivant, jobtiens

C:\Program Files\Java\jdk1.6.0_12\bin>java GRAF
Etiquette;50
Etiquette
50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
java.lang.ArrayIndexOutOfBoundsException: 10

Voici le code

try{

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

int indexLigne = 0;

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

   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());
  }

______________________________________
DarK Sidious
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
12 févr. 2009 à 12:24
Salut,

Tu as plusieurs solutions à ton problèmes : soit décomposer ta chaîne "à la main" avec des splits, indexof, etc., soit utiliser des expressions régulières, soit utiliser des Patterns/Matchers.

Je te conseille de passer par la troisième solution qui est plus "java" que les 2 autres avec une approche objet :
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
______________________________________
DarK Sidious
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
12 févr. 2009 à 16:09
Ya la classe Scanner aussi dont  la methode next peut prendre un pattern :) (java >= 1.5)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tomski Messages postés 48 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 24 décembre 2009
13 févr. 2009 à 09:09
salut !

jsuis aller voir le regex, mais bon jsuis pas familiere avec....

jaimerais :
lire la premiere ligne prob1 ; val1 
detecter le ";"
puis lire la chaine entre le debut de la ligne et le ";" et la chaine après le ";". Stocker la premiere chaine dans un array de string, et la chaine apres le ";" la convertir en int et stocker dans un array de int

et ainsi de suite jusqua la fin de mon tableau....

Jvais me creuser les meninges, mais si quelquun a une idee ca minteresse

(_.:->
0
tomski Messages postés 48 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 24 décembre 2009
13 févr. 2009 à 10:23
Effectivement !!!
Des fois on se prend la tete pour rien...

Merci :)

(_.:~:._)
0
tomski Messages postés 48 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 24 décembre 2009
13 févr. 2009 à 13:40
Heu,  si quelquun veut bien encore maider...
Ce que jessaye de faire: jai un fichier texte en entrée qui sappelle input.txt et qui contient des valeurs comme ceci:
Etiquette;50
Papier;20
..; ..

Je cherche a ranger Etiquette et Papier et n... dans un Array de String.
et les valeurs dans un array de int

Pour cela, grace au tip de DarkSidious, je cherche le ";" dans ma string via un split, ensuite de prends les substring avant et apres le ";".


Le probleme doit etre certainement au niveau de ma boucle for ou while.
Si quelquun peut maider a decoder ce ki  ne va pas dans mon code... ce serait top mega cool.
Ensuite une fois ke mes arrays seront bien remplis, je piocherai dedans pour creer des JLabels avec pour nom/valeur le contenu des arrays a lindex i. (Jessaye de faire un graphe)

Quand jexecute le code suivant, jobtiens

C:\Program Files\Java\jdk1.6.0_12\bin>java GRAF
Etiquette;50
Etiquette
50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
Array1= Etiquette
Array2= 50
java.lang.ArrayIndexOutOfBoundsException: 10

Voici le code

try{

BufferedReader br=new BufferedReader(new FileReader("input.txt"));
try{
   String ligne;
//creation arrays
String[] arrayString;
int[] arrayint;
arrayString = new String[10];
arrayint = new int[10];

   while ((ligne=br.readLine())!=null ){
                           
System.out.println(ligne);
ligne.split(";");
int idchar = ligne.indexOf(";");


String s1= ligne.substring(0,idchar);
        System.out.println(s1);
        String s2= ligne.substring(idchar+1,ligne.length());
        System.out.println(s2);
for(int i=0; i<ligne.length(); i++){
        arrayString[i] = s1;
        System.out.println("Array1= "+arrayString[i]);
        arrayint[i] = Integer.parseInt(s2);
        System.out.println("Array2= "+arrayint[i]);


}//end for
    System.out.println(ligne);
    chaine+=ligne+"\n";
   }
                        }finally{
       br.close();
                        }
  }catch (Exception e){
   System.out.println(e.toString());
  }


           /*FIN LECTURE FICHIER TEXTE*/

(_.:~:._)
0
tomski Messages postés 48 Date d'inscription mercredi 24 mars 2004 Statut Membre Dernière intervention 24 décembre 2009
16 févr. 2009 à 15:27
Merciiiiiiiiiiii !!

(_.:~:._)
0
Wiska Messages postés 15 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 13 août 2012
22 juil. 2009 à 13:50
bonjour, quand je teste ton source (darksidious) j'obtiens une exception du type:
java.lang.NumberFormatException: For input string: "T"

mon fichier ressemble à ceci:
Toto|-1.2
Tata|-2
Titi|-1
Tutu|-3
Tete|-2.5
Tyty|-5

voici le source:

public void ChargerFichier(String file)
{
try
{
BufferedReader br = new BufferedReader(new FileReader(file));
try
{
String ligne;
//creation arrays
String[] arrayString;
int[] arrayint;
int indexLigne = 0;

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

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());
}
}

et l'appel de la fonction:

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

Si quelqu'un peut m'aider.... d'avance merci.
0