Java txt file parsing
Sue
-
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!
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!
6 réponses
-
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" ...-
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 -
-
-
-
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...
-
-
-
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 -
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.-
-
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); } -
-
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(); -
-
-
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! -