Java txt file parsing

Fermé
Sue - 20 mars 2012 à 17:05
 Sue - 26 mars 2012 à 19:35
Bonjour,

svp pourriez vous me guider pour faire ce programme en java..
j ai un fichier texte que je dois parser et stocker le contenu dans une base de donnée MySql; le fichier est formé de plusieurs lignes de la forme :
xxxxxxxxxxxxxx...xx (210 bytes)
je dois troncaturer chaque ligne en 17 champs (les champs ne sont pas séparés par un signe spécial); je connais le nombre de caractères de chaque champs
des indications pour faire cette troncature ? et ensuite comment passer à la base de donnée ?

Je vous remercie d avance!



A voir également:

6 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
20 mars 2012 à 17:12
Vu qu'on a aucune idée ce que sont tes champs et donc ce que contient ta ligne c'est très compliqué à répondre.
Quand tu dis "210 bytes", c'est des vrais bytes (des entiers codés sur un octet) ou est-ce que tu confonds avec autre chose (des char par exemple)
Sinon, tu fais 210/17, et tu fais donc 17 champs de 12,35 "bytes" ...
0
les champs ne contient pas le même nobre de caractères..
chaque ligne représente un enregistrement, des entiers et des espace si le champs est vide
ça donne des ligne de la forme :
0002350888778800 357789908888 12355.....(etc)
0003555889998800537599999999 57712355.....
je veux par exemple pr mon premier champs (1ère ligne) juste les 7 premiers caractère , le 2ème les 5 qui suit einsi de suite
pouvez me donner des indication?

merci
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
20 mars 2012 à 18:09
Et pourquoi tu veux juste les 7 premiers caractères sur la première ligne et que 5 sur la deuxième ?
Il va falloir être beaucoup plus clair sur ce que tu veux, parce que pour l'instant il n'y a aucun critère utilisable...
0
je parle de 2ème champs et non pas 2ème ligne ..
les champs sont de même longueur pour toutes les lignes de ..
0
quels critères svp ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
20 mars 2012 à 18:22
C'est à toi de connaître les critères ! C'est toi qui sait ce que représente les données de ton fichier et de ta base de données...

Tu dis que "0002350888778800 357789908888 12355" doit être découpée en "0002350" et "88877", je ne vois aucune raison à cela...

Si tu avais "Bonjour,Toto,Carambar", le critère de découpe serait la virgule...
0
Désolée, ce sont des char... (entiers et espaces non significatifs pour moi)
0
Utilisateur anonyme
20 mars 2012 à 18:35
Salut,

Etant donné que 210 n'est pas divisible par 17 et que tu dis connaître la taille de chaque champ, peux tu nous dire si cette taille (de champ) est la même pour toutes les lignes et si oui, ce qui est souhaitable, quelles sont ces 17 tailles ?

Merci
0
Salut,

Oui les tailles des champs sont fixes pour toutes les lignes
les tailes sont respectivement : 15,24,24,24,14,14,3,5,3,4,1,2,1,24,24,24,24,2

merci
0
Utilisateur anonyme
20 mars 2012 à 19:44
Pourquoi 18 tailles pour 17 champs annoncés ?
En outre le tatal de ces 18 tailles = 232 alors que ce total devrait être 210.

Où est l'erreur ?
0
c bien 230 , les deux derniers caractère que j ai noté c pour le "Carriage Return" et "Line feed"
0
Re,

Il suffit de mettre les tailles des 17 champs dans un tableau

String tailleChamps = "15,24,24,24,14,14,3,5,3,4,1,2,1,24,24,24,24";  
         String[] lesTailles = tailleChamps.split(",");  
      //L'extraction des 17 sous-chaines d'une ligne se fera par substring en utilisant les longueurs stockées dans le tableau lesTailles  
        
      //Simulation de la lecture d'une ligne:  
String uneLigne = "AaaaaaaaaaaaaaABbbbbbbbbbbbbbbbbbbbbbbBCccccccccccccccccccccccCDddddddddddddddddddddddDEeeeeeeeeeeeeEFffffffffffffFGgGHhhhHIiIJjjJKLLMNnnnnnnnnnnnnnnnnnnnnnnNOooooooooooooooooooooooOPppppppppppppppppppppppPQqqqqqqqqqqqqqqqqqqqqqqQcr";   
        
      //Découpage de la ligne  
         String[] lesSousChaines = new String[17];  
         for(int i = 0; i < lesTailles.length; i++)  
         {  
            lesSousChaines[i] = uneLigne.substring(0,Integer.parseInt(lesTailles[i]));  
            // le reste de la ligne:  
            uneLigne = uneLigne.substring(Integer.parseInt(lesTailles[i]));  
         }  

         // affichage de contrôle:  
         for(int i = 0; i < lesTailles.length; i++)  
            System.out.println("item " + (i +1) + " = " + lesSousChaines[i]);  


Bien entendu, il faut exploiter ces sous-chaînes avant la lecture de la ligne suivante.

Cordialement,

Dan

--Plus on apprend... plus on se rend compte qu'on ne connaît pas grand-chose.
0
Merci bien
j ai essayé d appliquer ça avec mon fichier mais ça me renvoie tjrs cet erreur "Error: String index out of range: 14"
quel pourrait être l'erreur svp?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
22 mars 2012 à 19:24
C'est parce que ta String n'est pas assez longue pour le parsing attendu.
Dans le code de Danimo tu peux rajouter ces instructions pour avoir le détail de l'erreur :

try
{
	lesSousChaines[i] = uneLigne.substring(0,Integer.parseInt(lesTailles[i])); 
}
catch (java.lang.StringIndexOutOfBoundsException e)
{
	System.err.println("i="+i+" | uneLigne="+uneLigne);
	System.err.println(lesTailles[i]+" caractères attendus");
	System.err.println(uneLigne.length()+" caractères trouvés");
	throw(e);
}
0
je crois avoir compris mon erreur, je dois lire le fichier et appliquer le parsing à partir de la 2ème ligne jusquà l avant dernière
comment puis je le faire svp ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
24 mars 2012 à 15:54
Tout dépend comment tu fais la lecture de ton fichier, mais avec un Scanner ça donne :

Scanner sc = new Scanner(new File("D:\\test.txt"));
sc.nextLine();

String str = sc.nextLine();
while (sc.hasNextLine())
{
	traitement(str); // la méthode de traitement d'une ligne
	str = sc.nextLine();
}

sc.close();
0
merci bien ça marche :))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
j'utilise Mysql , connaissez vous un lien utile qui me permettra de terminer mon projet, à savoir : assurer la connexion avec la database et y stocker les données après parsing .. je me perds un peu avec tout ce que je trouve sur le net
Je vous remercie bien!
0
Comment puis-je svp stocker mes données après parsing dans une table Mysql ?
merci
0