Extraire les données d'un fichier texte en utilisant java [Fermé]

Signaler
Messages postés
11
Date d'inscription
samedi 9 février 2013
Statut
Membre
Dernière intervention
5 avril 2013
-
maroun_ba
Messages postés
11
Date d'inscription
samedi 9 février 2013
Statut
Membre
Dernière intervention
5 avril 2013
-
Bonsoir,
J'ai un fichier texte qui contient les numéros de comptes, libellé et solde des comptes comme suit
26446 PRODUITS ALIMENTAIRES 131.27D
264467 FRAIS TAXI 33.55D
etc
je veux extraire les données et les mettre dans un tableau ou un vecteur le problème est que le nombre d'espace n'est pas le même entre les 3 champs, ils ne sont pas ordonnés . comment faire !!
j'ai fais le code suivant mais ça marche pas.
public class ReadFile {

public static void main(String[] args){
String fichier ="C:/Users/marouen/Downloads/2011.txt";
int i=0;
String a = null;
//lecture du fichier texte
try{
InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
while ((ligne=br.readLine())!=null){
a=ligne;
i++;
System.out.println(ligne);
}
br.close();
System.out.println(i);
System.out.println(a);
String str[]=a.split(" ");
//lsuuprimer les espaces vides
if (str[i-1]==" " && str[i]==" ")
{
for (int j=i;j<str.length;j++)
str[j]=str[j+1];

}
System.out.println(str[2]);
}
catch (Exception e){
System.out.println(e.toString());
}
}
}
merci de me répondre.

9 réponses

Messages postés
11
Date d'inscription
samedi 9 février 2013
Statut
Membre
Dernière intervention
5 avril 2013
1
OK merci je vais essayer.Le problème est que un logiciel comptable qui crée ce fichier texte.Donc je vais voir est ce que je peux modifier ce logiciel.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62808 internautes nous ont dit merci ce mois-ci

ajp55
Messages postés
431
Date d'inscription
dimanche 31 juillet 2011
Statut
Membre
Dernière intervention
17 février 2015
20
l'idée c'est de changer les séparateur des différents champs.
maroun_ba
Messages postés
11
Date d'inscription
samedi 9 février 2013
Statut
Membre
Dernière intervention
5 avril 2013
1
Merci pour votre aide.
Messages postés
16093
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 décembre 2019
2474
Plusieurs problèmes, plus ou moins grave (dans l'ordre du code)

1)
InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);

C'est un peu compliqué tout ça, la classe Scanner est plus simple à manipuler.

2)
while ((ligne=br.readLine())!=null){
a=ligne;
i++;
System.out.println(ligne);
}

Ta boucle est trop courte, tu as plein de calculs après qui utilisent encore i, et a, mais qui du coup ne concernent que la dernière ligne...

3)
String str[]=a.split(" ");
Si tu ne sais pas combien d'espaces tu as, il vaut mieux utiliser une regex \s+

4)
str[i]==" "
Il ne faut jamais comparer deux chaînes de caractères avec == ça n'a pas de sens, il faut utiliser la méthode equals.
En plus, i correspond au nombre de lignes lues, alors que str.length correspond au nombre de champs par ligne (3 ?) alors ça ne va pas correspondre...
Messages postés
11
Date d'inscription
samedi 9 février 2013
Statut
Membre
Dernière intervention
5 avril 2013
1
merci bien pour votre aide \s+ a résolu le problème ,mais il peut exister des espaces dans le champs libellé comme "produit alimentaire" est ce qu'il y a une idée.
ajp55
Messages postés
431
Date d'inscription
dimanche 31 juillet 2011
Statut
Membre
Dernière intervention
17 février 2015
20
si tu a les champs qui comprennent les espaces comme séparateur, tu peux utilisé un autre séparateur, par example #.
26446#PRODUITS ALIMENTAIRES#131.27D 

une manière simple de découper tes champs, c'est d'utilisé StringTokenizer(chaine, delimiteur).confère documentation java pour voir l'utilisation.
KX
Messages postés
16093
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 décembre 2019
2474
Pour info (confer documentation java)

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
ajp55
Messages postés
431
Date d'inscription
dimanche 31 juillet 2011
Statut
Membre
Dernière intervention
17 février 2015
20
thk KX, I didn't know it was discouraged.
henceforth, no code with StringTokenizer..
C'est cool t'appartenir à ce forum.