SCAN d'un fichier .txt a l'aide de Scanner en JAVA

Signaler
Messages postés
2
Date d'inscription
dimanche 10 janvier 2010
Statut
Membre
Dernière intervention
24 septembre 2010
-
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
-
Bonsoir,

je cherche à réaliser une méthode qui doit récupérer des informations contenues dans un fichier .txt. je veux trouver comment récuperer plusieurs informations sur la même ligne.

sachant que chaque ligne contiendra :
[string] puis un [string] puis un [string] puis un [string] puis un [double] et a la finun [int], et je dois récupérer ces 3 infos pour chaque ligne

exemple de fichier .txt

L012 MADAME THERESE Biographie A082 15.00 219
L014 LE DERNIER DES MOHICANS Essai A037 15.80 222
L016 PINOCCHIO Roman A032 14.00 132
L018 LE PETIT CHOSE Roman A043 21.00 115
L020 LETTRES DE MON MOULIN Nouvelles A043 14.60 188
L022 DON QUICHOTTE DE LA MANCHE Roman A021 11.50 347
L024 EUGENIE GRANDET Roman A054 23.45 255
L026 LE LYS DANS LA VALLEE Roman A054 23.00 411
L030 LES MISERABLES Roman A085 9.50 418
L032 LES TRAVAILLEURS DE LA MER Roman A085 19.00 362

j'ai essayé avec ca :

public void lireBddLivre(String nomFichier) throws IOException {
// TODO Auto-generated method stub
Scanner s = new Scanner(new File(nomFichier));
s.useDelimiter("\t" );

String titre;
String code;
String codeAuteur;
String categorie;
int nbPages;
double prix;

while(s.hasNext())
{
code=s.next();
titre=s.next();
categorie=s.next();
codeAuteur=s.next();
prix=s.nextDouble();
nbPages=s.nextInt(); //sachant que je dois passer a la ligne suivante !

Livre l = new Livre(titre,code,codeAuteur,categorie,nbPages,prix);
addLivre(l);
}
s.close();
}

quelqu'un peut-il m'aider SVP ?

3 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Salut,

À mon avis, tu n'as pas besoin de spécifier :
s.useDelimiter("\t");

Pour le reste ça doit fonctionner, non?
Messages postés
2
Date d'inscription
dimanche 10 janvier 2010
Statut
Membre
Dernière intervention
24 septembre 2010

Merciiiiiiii pour votre reponse !
ca marche pas !
pour bien comprendre :
j'ai recuperer plusieurs informations d'un autre fichier d'auteurs (auteur.txt) a l'aide d'une autre fonction public void lireBddAut(String nomFichier) throws IOException {...} et ca a bien marcher par ce qu'il n'y a que des String pour chaque ligne (cad pour chaque Auteur)
mais le probleme avec les livres c'est l'existance (en plus de type String) de deux autres types int et double !


fichier (auteur.txt):
A001 NEWBY ERIC GB
A003 TERRAY LIONEL F
A005 TABARLY ERIC F
A006 HEYERDAHL THOR DK
A009 TWAIN, MARK USA
A012 LA FONTAINE JEAN (DE) F
A017 TOLKIEN J.R.R. GB
A021 CERVANTES E
A030 SWIFT JONATHAN GB
A032 COLLODI CARLO I
A037 COOPER FENIMORE USA
A039 ZOLA EMILE F
A041 BEECHER-STOWE HARRIET USA
A043 DAUDET ALFONSE F
A044 DE FOE DANIEL GB
A045 POE EDGAR F
A052 PERRAULT CHARLES F
A054 BALZAC HONORE (DE) F
A060 VERNE JULES F
A062 DUMAS ALEXANDRE F
A076 SHAKESPEARE WILLIAM GB
A077 SCOTT WALTER USA
A078 MALOT HECTOR F
A082 ERCKMANN CHATRIAN B
A085 HUGO VICTOR F
A087 GAUTIER THEOPHILE F
A101 SUE EUGENE F
A104 HILL HENRY GB
A135 ROUGE DANIEL F
A145 BOISGONTIER JACQUES F


fonction:(pour le traitement des auteurs)
public void lireBddAut(String nomFichier) throws IOException {
// TODO Auto-generated method stub
Scanner s = new Scanner(new File(nomFichier));
s.useDelimiter("\t");
String name;
String code;
String country;
while(s.hasNext())
{
code=s.next();
name=s.next();
country=s.nextLine();
Auteur a = new Auteur(name,code,country);
addAuteur(a);
}
s.close();
}

l'execution marche bien pour le fichier d'auteur mais pas pour les livres :
lien pour voir l'image de l'execution :
http://www.megaupload.com/?d=BU2G5UW6

Merci encore !
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Re,

Primo, tu dois enlever la ligne :
s.useDelimiter("\t");

Secundo, si ton OS (Windows?) est configuré en français, Java suppose que le séparateur décimal est la virgule ',' alors que les anglais, américains, ... utilisent le '.'

Rajoute donc cette ligne juste après l'instanciation de ton Scanner :
s.useLocale(Locale.US);

Voilà, je suis au taf, donc megaupload bloqué, mais je pense que ça va résoudre ton problème, sinon donne-nous la stacktrace complète, c'est vraiment l'outil de diagnostic fondamental.