Java : Lire un fichier
Résolu
Julo_du_59
Messages postés
80
Date d'inscription
Statut
Membre
Dernière intervention
-
Julo_du_59 Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
Julo_du_59 Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je souhaite créer un programme en Java qui me permettrai de charger une liste de verbes irréguliers en anglais, d'afficher les infinitifs dans une liste de sélection (ComboBox), et d'afficher dans 3 cases le prétérit, le participe passé et enfin la traduction.
Le fichier texte que je dois charger se décompose de la manière suivante :
"
to beat beat beaten battre
to be was/were been être
...
"
Je dispose donc de cette interface :
http://servimg.com/index.php?noimg=1&lang=en&k=136
Nous voyons ma ComboBox (verbe), et les 3 cases qui nous serviront à afficher les 3 infos différentes.
J'aimerai commencer par suciter votre aide au niveau de l'affichage des infinitifs dans la liste, j'ai le code suivant au départ :
http://servimg.com/index.php?noimg=1&lang=en&k=136
D'origine je dispose des informations jusqu'au "BufferedReader..."
J'ai ajouté moi-même la bocule while, mais j'aimerai stocker chaque ligne récupèré dans un vecteur "v", je ne sais pas trop comment m'y prendre.
Ensuite, je souihaite découper les lignes récupèrer morceau par morceau, d'où mon utilisation d'un StringTokenizer, mais je n'y arrive pas correctement, pourtant je sent que je ne suis pas loin.
Autre problème, je ne souhaite récpèrer QUE les infinitifs, soi le premier mot de chaque ligne et le placer dans la comboBox ...
Je pense que le reste doit être bon :
http://servimg.com/index.php?noimg=1&lang=en&k=136
A vérifier, car il faut que la 1ere partie fonctionne bien pour que celle-ci entre en action !
Bref, je sollicite votre aide dans l'espoir d'avoir une réponse qui pourra m'aider
Merci d'avance
je souhaite créer un programme en Java qui me permettrai de charger une liste de verbes irréguliers en anglais, d'afficher les infinitifs dans une liste de sélection (ComboBox), et d'afficher dans 3 cases le prétérit, le participe passé et enfin la traduction.
Le fichier texte que je dois charger se décompose de la manière suivante :
"
to beat beat beaten battre
to be was/were been être
...
"
Je dispose donc de cette interface :
http://servimg.com/index.php?noimg=1&lang=en&k=136
Nous voyons ma ComboBox (verbe), et les 3 cases qui nous serviront à afficher les 3 infos différentes.
J'aimerai commencer par suciter votre aide au niveau de l'affichage des infinitifs dans la liste, j'ai le code suivant au départ :
http://servimg.com/index.php?noimg=1&lang=en&k=136
D'origine je dispose des informations jusqu'au "BufferedReader..."
J'ai ajouté moi-même la bocule while, mais j'aimerai stocker chaque ligne récupèré dans un vecteur "v", je ne sais pas trop comment m'y prendre.
Ensuite, je souihaite découper les lignes récupèrer morceau par morceau, d'où mon utilisation d'un StringTokenizer, mais je n'y arrive pas correctement, pourtant je sent que je ne suis pas loin.
Autre problème, je ne souhaite récpèrer QUE les infinitifs, soi le premier mot de chaque ligne et le placer dans la comboBox ...
Je pense que le reste doit être bon :
http://servimg.com/index.php?noimg=1&lang=en&k=136
A vérifier, car il faut que la 1ere partie fonctionne bien pour que celle-ci entre en action !
Bref, je sollicite votre aide dans l'espoir d'avoir une réponse qui pourra m'aider
Merci d'avance
A voir également:
- Java : Lire un fichier
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
7 réponses
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.
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
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...
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
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
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
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 :/
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)); }
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()"
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 !
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 ^^