Detecter separateur ; dans un fichier TXT [Résolu]

Signaler
Messages postés
48
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2009
-
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
13 août 2012
-
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

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
Salut,

Si c'est aussi simple, te prends pas la tête : utilise un String.split(";");
______________________________________
DarK Sidious
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
103
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
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
12
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"
Messages postés
48
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2009

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

(_.:->
Messages postés
48
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2009

Effectivement !!!
Des fois on se prend la tete pour rien...

Merci :)

(_.:~:._)
Messages postés
48
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2009

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*/

(_.:~:._)
Messages postés
48
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
24 décembre 2009

Merciiiiiiiiiiii !!

(_.:~:._)
Messages postés
15
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
13 août 2012

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.