Gestion de chaines alphanumériques (equivalent a un champ VARCHAR)
xuenylom
Messages postés6Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention 6 août 2004
-
6 août 2004 à 11:28
xuenylom
Messages postés6Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention 6 août 2004
-
6 août 2004 à 14:55
bonjour,
je dois traiter un fichier texte de type CSV (sauf que les séparateurs sont pas des ; mais juste des tabulations) dans lequel se trouvent des champs ou on trouve a la fois des entiers et des caractères (par exemple des adresses, genre "6 rue truc")
or je ne sais pas quel type de variable utiliser pour récuperer la valeur de chaines comme ca
j'attends vos idées avec impatience, merci d'avance
Hades53
Messages postés231Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention 7 juillet 2009 6 août 2004 à 13:56
Ma fonction gettok devrait être utile dans ce cas là.
Sinon tu peux 'spliter' ta chaîne 'ligne' en plusieurs sous-chaînes.
char *c, *d;c d ligne; /*ligne: une des ligne de ton fichier*/
while (*c) {
while (*c != 9 && *c) c++;
if (*c == 9) {
*c = 0;
printf("chaine: %s\n",d); //d represente la sous-chaine actuelle
d = ++c;
}
else {
printf("chaine: %s\n",d); //d represente la dernière sous-chaine
break; //nous évite une vérification de *c inutile
}
}
xuenylom
Messages postés6Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention 6 août 2004 6 août 2004 à 14:38
J'ai réussi a bidouiller un truc avec fgets qui marche partiellement, maintenant j'ai un probleme de comptage.
pour que vous compreniez un peu plus prenons un exemple (en gros, le fichier sur lequel je fais mes tests a la con)
j'ai un fichier texte qui contient :
blah bleh bloh truc 5 truc blah
ce que je veux c'est récupérer "truc 5 truc".
je sais que cette chaine se trouve entre la 3eme et la 4eme tabulation.
j'ai les variables suivantes:
int main(void)
{
FILE *file;
char Buffer;
//char ptrMot;
char motVC[15];
int nbTab=0;
ce que je fais, c'est que je compte d'abord le nombre de tabulations:
---------------------------------------------
while (nbTab<3)
{
fread(&Buffer, 1, 1, file); //on range les caractere dans le buffer
if (Buffer=='\t') nbTab++;
---------------------------------------------------
ensuite, je calcule la taille du champ que je veux en comptant le nb de caractères jusqu'a la prochaine tabulation:
--------------------------
i=0;
fread(&Buffer, 1, 1, file);
while (Buffer!='\t') {i++;}
----------------------------
Enfin, j'extrait la chaine de longueur i et je la range la ou je veux:
seulement voila, le programme ne s'arrete pas a la 4eme tabulation, donc je me retrouve avec motVC qui contient "truc 5 truc blah"
et n'etant pas le plus fortiche en C, j'arrive pas a trouver pq il s'arrete pas de compter après la 4eme tabulation pour calculer la longueur du champ/
une idée? :question)
Vous n’avez pas trouvé la réponse que vous recherchez ?