Java : Lire un fichier
Résolu/Fermé
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
-
25 nov. 2011 à 14:49
Julo_du_59 Messages postés 80 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 9 mars 2013 - 28 nov. 2011 à 00:13
Julo_du_59 Messages postés 80 Date d'inscription dimanche 3 août 2008 Statut Membre Dernière intervention 9 mars 2013 - 28 nov. 2011 à 00:13
A voir également:
- Java : Lire un fichier
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Télécharger jeux java gameloft gratuit - Forum Mobile
- Java décompiler - Télécharger - Langages
7 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
25 nov. 2011 à 17:16
25 nov. 2011 à 17:16
Regarde les possibilités qu'offrent la classe Scanner en particulier avec des méthodes de traitement d'expressions régulières comme match ou findWithinHorizon.
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
27 nov. 2011 à 12:56
27 nov. 2011 à 12:56
Merci de votre réponse
Je pense avoir une idée mais mon problème réside dans le fait que je n'arrive pas à charger mon texte dans mon vecteur V,
si vous pouviez m'indiquer comment réussir à le charger, je dispose de ceci :
while((ligne = br.readLine())!=null)
{
contenu = v.add(ligne);
}
Mais je veux décomposer mon texte (lu ligne par ligne) avec un StringTokenizer, et c'est là qu'intervient mon problème.
N'arrivant pas à charger mon texte correctement dans le vecteur, je n'arrive pas à le décomposer correctement
Merci d'avance de votre réponse
Je pense avoir une idée mais mon problème réside dans le fait que je n'arrive pas à charger mon texte dans mon vecteur V,
si vous pouviez m'indiquer comment réussir à le charger, je dispose de ceci :
while((ligne = br.readLine())!=null)
{
contenu = v.add(ligne);
}
Mais je veux décomposer mon texte (lu ligne par ligne) avec un StringTokenizer, et c'est là qu'intervient mon problème.
N'arrivant pas à charger mon texte correctement dans le vecteur, je n'arrive pas à le décomposer correctement
Merci d'avance de votre réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
27 nov. 2011 à 18:49
27 nov. 2011 à 18:49
Comme je l'ai dit, je pense que tu as tout intérêt à utiliser Scanner (JDK 1.5). qui combine le comportement de BufferedReader (JDK 1.1) et StringTokenizer (JDK 1.0) en une seule classe, ça t'évite d'avoir à tout gérer en même temps, et c'est plus efficace.
Pour ta décomposition de la ligne, il serait plus simple que tu es des \t entre chaque champ, dans ce cas tu peux recréer un autre Scanner sur la ligne lue pour distinguer chaque champ.
Remarque : tu parles d'un vecteur v, si tu parles de la classe Vector, il y a mieux à utiliser, au minimum une Arraylist, voire des HashMap selon ce que tu veux faire...
Scanner fichier = new Scanner(new File("english.txt"),"iso-8859-1"); while(fichier.hasNextLine()) System.out.println("["+fichier.nextLine()+"]"); fichier.close();
Pour ta décomposition de la ligne, il serait plus simple que tu es des \t entre chaque champ, dans ce cas tu peux recréer un autre Scanner sur la ligne lue pour distinguer chaque champ.
Scanner fichier = new Scanner(new File("english.txt"),"iso-8859-1"); while (fichier.hasNextLine()) { Scanner ligne = new Scanner(fichier.nextLine()).useDelimiter("\t"); while (ligne.hasNext()) System.out.print("["+ligne.next()+"]"); System.out.println(); } fichier.close();
Remarque : tu parles d'un vecteur v, si tu parles de la classe Vector, il y a mieux à utiliser, au minimum une Arraylist, voire des HashMap selon ce que tu veux faire...
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
27 nov. 2011 à 22:23
27 nov. 2011 à 22:23
Disons que je ne connais pas trop ces outils, j'ai débuté la programmation JAVA il y a seulement quelques mois, et j'ai pour consigne de respecter ce genre d'écriture, c'est à dire utiliser seulement les lectures bufferisées ligne par ligne et les String Tokenizer.
Ce qui me dérange c'est que je n'arrive pas à faire mon StringTokenizer comme je le souhaite, si j'écrit
while((ligne = br.readLine())!=null)
{
contenu = v.add(ligne);
}
StringTokenizer st = new StringTokenizer(contenu, "\n\t", false)
ça plante, vu que contenu est soi-disant du type boolean, alors là je sèche complétement, je ne comprend pas trop mon erreur
Ce qui me dérange c'est que je n'arrive pas à faire mon StringTokenizer comme je le souhaite, si j'écrit
while((ligne = br.readLine())!=null)
{
contenu = v.add(ligne);
}
StringTokenizer st = new StringTokenizer(contenu, "\n\t", false)
ça plante, vu que contenu est soi-disant du type boolean, alors là je sèche complétement, je ne comprend pas trop mon erreur
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
27 nov. 2011 à 23:04
27 nov. 2011 à 23:04
Qu'est ce que c'est v ? Si c'est bien un Vector comme je le pense, alors c'est normal que add renvoie un booléen qui vaut true si le contenu a changé ou false sinon.
Si ce que tu veux c'est récupérer la valeur de la ligne et bien utilise directement ta variable ligne...
Si ce que tu veux c'est récupérer la valeur de la ligne et bien utilise directement ta variable ligne...
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
27 nov. 2011 à 23:08
27 nov. 2011 à 23:08
Oui v est un vector excusez-moi de ne pas avoir précisé !
j'ai tenté de faire :
while(st.hasMoreTokens())
{
for(int i=0; i<ligne.length(); i++)
{
verbe.addItem(st.nextToken());
st.nextToken();
st.nextToken();
st.nextToken();
}
}
Je récupère le premier mot à chaque fois, donc, l'infinitif. Mais ça ne marche pas, je ne comprend pas
j'ai tenté de faire :
while(st.hasMoreTokens())
{
for(int i=0; i<ligne.length(); i++)
{
verbe.addItem(st.nextToken());
st.nextToken();
st.nextToken();
st.nextToken();
}
}
Je récupère le premier mot à chaque fois, donc, l'infinitif. Mais ça ne marche pas, je ne comprend pas
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 27/11/2011 à 23:23
Modifié par KX le 27/11/2011 à 23:23
Je n'ai pas trop compris ce que tu voulais faire exactement, mais voici un petit exemple d'utilisation.
Remarque : ça ne fonctionnera que si tu as bien des \t entre chaque champ, si ce n'est pas le cas le résultat sera moins intéressant...
public static void main(String...args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt")); String ligne; while ((ligne = br.readLine())!=null) { System.out.println(ligne); StringTokenizer st = new StringTokenizer(ligne,"\n\t",false); while (st.hasMoreElements()) System.out.println(st.nextToken()); } }
Remarque : ça ne fonctionnera que si tu as bien des \t entre chaque champ, si ce n'est pas le cas le résultat sera moins intéressant...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
27 nov. 2011 à 23:25
27 nov. 2011 à 23:25
En fait, je dispose d'un fichier "irregulier.txt" que je souhaite 'ajouter' dans le vector v.
irregulier.txt est du genre :
"be was/were been être
to steal stole stolen voler"
La liste étant trés longue, je fais une boucle FOR
et je souhaite donc prendre tous les premiers terme de cette liste, soit l'infinitif du verbe en anglais, et l'ajouter dans ma liste nommée "verbe"
d'où le verbe.addItem() en première action dans la boucle, mais je n'arrive pas à ajouter quoi que ce soit dans ma liste :/
irregulier.txt est du genre :
"be was/were been être
to steal stole stolen voler"
La liste étant trés longue, je fais une boucle FOR
et je souhaite donc prendre tous les premiers terme de cette liste, soit l'infinitif du verbe en anglais, et l'ajouter dans ma liste nommée "verbe"
d'où le verbe.addItem() en première action dans la boucle, mais je n'arrive pas à ajouter quoi que ce soit dans ma liste :/
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 27/11/2011 à 23:36
Modifié par KX le 27/11/2011 à 23:36
Remarque : il est impossible de savoir quand il faut couper au premier espace (entre be et was) et quand il faut couper au deuxième espace (entre steal et stole), il faut qu'il y ait un séparateur autre que l'espace (par exemple \t) pour savoir où couper.
Si je reprends mon exemple ça donne avec Tokenizer :
Ou plus simple, sans Tokenizer :
Si je reprends mon exemple ça donne avec Tokenizer :
public static void main(String...args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt")); String ligne; JComboBox verbe = new JComboBox(); while ((ligne = br.readLine())!=null) { StringTokenizer st = new StringTokenizer(ligne,"\n\t",false); if (st.hasMoreElements()) verbe.addItem(st.nextToken()); } for (int i =0; i<verbe.getItemCount(); i++) System.out.println(verbe.getItemAt(i)); }
Ou plus simple, sans Tokenizer :
public static void main(String...args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt")); String ligne; JComboBox verbe = new JComboBox(); while ((ligne = br.readLine())!=null) verbe.addItem(ligne.substring(0, ligne.indexOf("\t"))); for (int i =0; i<verbe.getItemCount(); i++) System.out.println(verbe.getItemAt(i)); }
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
27 nov. 2011 à 23:45
27 nov. 2011 à 23:45
while ((ligne = br.readLine())!=null)
{
StringTokenizer st = new StringTokenizer(ligne,"\n\t",false);
if (st.hasMoreElements())
verbe.addItem(st.nextToken());
}
en tapant cela, je vais prendre le premier terme de chaque ligne ? Ou bien ça va prendre tous les termes et les mettre dans ma liste ?
Car je ne souhaite prendre que le premier terme de chaque liste "be", "to steal", "to broke", "have", etc ...
Autre question, je n'ai pas vu l'outil "getItemCount()", y'aurait-il un autre outil similaire ?
De même pour l'outil "getItemAt()"
{
StringTokenizer st = new StringTokenizer(ligne,"\n\t",false);
if (st.hasMoreElements())
verbe.addItem(st.nextToken());
}
en tapant cela, je vais prendre le premier terme de chaque ligne ? Ou bien ça va prendre tous les termes et les mettre dans ma liste ?
Car je ne souhaite prendre que le premier terme de chaque liste "be", "to steal", "to broke", "have", etc ...
Autre question, je n'ai pas vu l'outil "getItemCount()", y'aurait-il un autre outil similaire ?
De même pour l'outil "getItemAt()"
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
27 nov. 2011 à 23:56
27 nov. 2011 à 23:56
Il faut que tu testes tout ça pour voir ce que ça fait !!!
Effectivement, ça ne prendra que le premier terme (les deux codes font la même chose)
Après moi j'utilise getItemAt pour lire ce qui est dans la JComboBox car j'ai pas envie de créer toute une interface Swing pour faire les tests mais vu que toi tu l'as déjà ça devrait s'afficher directement.
Remarque : si tu attends qu'on t'apprenne tout du langage Java, dans un an tu n'en seras qu'au niveau débutant, on ne peut pas tout t'apprendre et il faut faire preuve d'un peu d'autonomie.
Personnellement j'utilise toujours Scanner et du coup je ne me sers jamais de BufferedReader, StringTokenizer et autres (faut dire qu'ils sont très compliqués pour pas grand chose), mais il me suffit de regarder dans la documentation, et hop je sais comment ça marche...
Si tu sais te servir de la documentation la plupart de tes questions vont s'envoler en quelques clics !
Effectivement, ça ne prendra que le premier terme (les deux codes font la même chose)
Après moi j'utilise getItemAt pour lire ce qui est dans la JComboBox car j'ai pas envie de créer toute une interface Swing pour faire les tests mais vu que toi tu l'as déjà ça devrait s'afficher directement.
Remarque : si tu attends qu'on t'apprenne tout du langage Java, dans un an tu n'en seras qu'au niveau débutant, on ne peut pas tout t'apprendre et il faut faire preuve d'un peu d'autonomie.
Personnellement j'utilise toujours Scanner et du coup je ne me sers jamais de BufferedReader, StringTokenizer et autres (faut dire qu'ils sont très compliqués pour pas grand chose), mais il me suffit de regarder dans la documentation, et hop je sais comment ça marche...
Si tu sais te servir de la documentation la plupart de tes questions vont s'envoler en quelques clics !
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
28 nov. 2011 à 00:08
28 nov. 2011 à 00:08
J'essaie toujours de faire ou refaire les programmes chez moi en autonomie mais les résultats ne sont pas encore là :/ Le problème c'est qu'on me demande d'utiliser BufferedReader, StringTokenizer, etc ... Si j'utilise d'autres méthodes, ne serai-je pas embêté quand il s'agira justement de manipuler ces outils plus complexes qu'on me demande ?
Je consulte la documentation et en effet, il y a énormément de choses possibles, y'en a du pain sur la planche ^^
Je consulte la documentation et en effet, il y a énormément de choses possibles, y'en a du pain sur la planche ^^
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
28 nov. 2011 à 00:12
28 nov. 2011 à 00:12
Ces outils sont complexes car ils sont plus vieux, Scanner fait la même chose car il combine les deux (et un peu plus) mais en plus simple. Là ta question portait sur getItemCount, et getItemAt, ce ne sont que des méthodes pour ta JComboBox verbe...
Julo_du_59
Messages postés
80
Date d'inscription
dimanche 3 août 2008
Statut
Membre
Dernière intervention
9 mars 2013
2
28 nov. 2011 à 00:13
28 nov. 2011 à 00:13
Je pense qu'avec ces outils je m'en sortirai mieux, merci de tes réponses KX !