A voir également:
- Afficher un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
Salut charline159,
En fait, tu veux travailler sur deux niveaux : tu délimites ta chaîne selon les virgules, pour chaque sous chaîne que tu trouves, tu veux la délimiter selon les (éventuels) guillemets.
Dans un tel cas, tu peux utiliser la version réentrante
http://manpagesfr.free.fr/man/man3/strtok.3.html
donne :
Sinon, ton cas étant assez simple, tu peux faire cela sur un seul niveau, en séparant par virgules seulement avec
Note que tout ceci fonctionne avec
Dal
En fait, tu veux travailler sur deux niveaux : tu délimites ta chaîne selon les virgules, pour chaque sous chaîne que tu trouves, tu veux la délimiter selon les (éventuels) guillemets.
Dans un tel cas, tu peux utiliser la version réentrante
strtok_r()(c'est du POSIX, mais c'est implémenté dans les versions récentes de MinGW) si tu as la possibilité de l'utiliser.
http://manpagesfr.free.fr/man/man3/strtok.3.html
#include <stdio.h> #include <string.h> int main(void) { char chaine[1024] = "2,\"Jumanji (1995)\",\"Adventure|Children|Fantasy\""; char * niveau1; char * p1; char * niveau2; char * p2; for (niveau1 = strtok_r(chaine, ",", &p1); niveau1 != NULL; niveau1 = strtok_r(NULL, ",", &p1)) { for (niveau2 = strtok_r(niveau1, "\",", &p2); niveau2 != NULL; niveau2 = strtok_r(NULL, "\",", &p2)) printf("%s\n", niveau2); } return 0; }
donne :
$ gcc -Wall 37094952.c
$ ./a.out
2
Jumanji (1995)
Adventure|Children|Fantasy
Sinon, ton cas étant assez simple, tu peux faire cela sur un seul niveau, en séparant par virgules seulement avec
strtok()et en regardant si le premier et le dernier caractère de la chaîne est un guillemet et si c'est le cas en incrémentant le pointeur de départ de la chaîne et en écrasant le guillemet de fin avec
'\0'....
Note que tout ceci fonctionne avec
strtok()ou
strtok_r()avec ton jeu de données car tu n'as pas de virgules à l'intérieur du texte entre guillemets. Si c'est un cas qui peut se produire, tu devrais opérer différemment.
Dal
strtok considère une suite de séparateurs comme un seul séparateur. Donc en gros, la séquence
Les séparateurs du second strtok contiennent un " de trop. Le troisième strtok n'a pas la virgule comme séparateur dans la liste du coup , est considéré comme un champ …
","est considérée comme un seul séparateur si tu donnes comme liste de séparateurs
,".
Les séparateurs du second strtok contiennent un " de trop. Le troisième strtok n'a pas la virgule comme séparateur dans la liste du coup , est considéré comme un champ …