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!
A voir également:
- Java txt file parsing
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- .Dat file - Guide
- Host file - Guide
- .Bin file - Guide
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" ...
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" ...
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
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
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.
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 :
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
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
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...
les champs sont de même longueur pour toutes les lignes de ..
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...