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

tomski 48 Messages postés mercredi 24 mars 2004Date d'inscription 24 décembre 2009 Dernière intervention - 12 févr. 2009 à 11:14 - Dernière réponse : Wiska 15 Messages postés vendredi 30 mai 2008Date d'inscription 13 août 2012 Dernière intervention
- 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.

(_.:~:._)
Afficher la suite 

9 réponses

Répondre au sujet
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 13 févr. 2009 à 09:12
+3
Utile
Salut,

Si c'est aussi simple, te prends pas la tête : utilise un String.split(";");
______________________________________
DarK Sidious
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_DARKSIDIOUS
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 13 févr. 2009 à 14:02
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_DARKSIDIOUS
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 12 févr. 2009 à 12:24
0
Utile
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
Commenter la réponse de cs_DARKSIDIOUS
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 12 févr. 2009 à 16:09
0
Utile
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"
Commenter la réponse de sheorogath
tomski 48 Messages postés mercredi 24 mars 2004Date d'inscription 24 décembre 2009 Dernière intervention - 13 févr. 2009 à 09:09
0
Utile
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

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

Merci :)

(_.:~:._)
Commenter la réponse de tomski
tomski 48 Messages postés mercredi 24 mars 2004Date d'inscription 24 décembre 2009 Dernière intervention - 13 févr. 2009 à 13:40
0
Utile
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*/

(_.:~:._)
Commenter la réponse de tomski
tomski 48 Messages postés mercredi 24 mars 2004Date d'inscription 24 décembre 2009 Dernière intervention - 16 févr. 2009 à 15:27
0
Utile
Merciiiiiiiiiiii !!

(_.:~:._)
Commenter la réponse de tomski
Wiska 15 Messages postés vendredi 30 mai 2008Date d'inscription 13 août 2012 Dernière intervention - 22 juil. 2009 à 13:50
0
Utile
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.
Commenter la réponse de Wiska

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.