Java txt file parsing

Sue -  
 Sue -
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 19031 Statut Modérateur 3 020
 
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
Sue
 
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 19031 Statut Modérateur 3 020
 
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
Sue
 
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
Sue
 
quels critères svp ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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
Sue
 
Désolée, ce sont des char... (entiers et espaces non significatifs pour moi)
0
Utilisateur anonyme
 
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
Sue
 
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
 
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
Sue
 
c bien 230 , les deux derniers caractère que j ai noté c pour le "Carriage Return" et "Line feed"
0
Utilisateur anonyme
 
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
Sue
 
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 19031 Statut Modérateur 3 020
 
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
Sue
 
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 19031 Statut Modérateur 3 020
 
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
Sue
 
merci bien ça marche :))
0

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

Posez votre question
Sue
 
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
Sue
 
Comment puis-je svp stocker mes données après parsing dans une table Mysql ?
merci
0