bonjour
j'effectue un traitement sur un fichier contenant des ligne de ce genre
X Y Z W
chaque élément X,Y,Z,W a une taille non fixe que je veux c'est extraire les élément X Z y a t'il une façon pour faire sa avec des fonction de c merci d'avance
Version imprimable
bonjour
j'effectue un traitement sur un fichier contenant des ligne de ce genre
X Y Z W
chaque élément X,Y,Z,W a une taille non fixe que je veux c'est extraire les élément X Z y a t'il une façon pour faire sa avec des fonction de c merci d'avance
Bonjour,
Peut-être ce tutoriel peut-il t'aider :
http://nicolasj.developpez.com/articles/regex/
Il m'avait bien aidé dans le temps pour écrire une application gérant des expressions régulières.
Je n'ai peut-être pas bien compris ton problème, mais il me semble bien que tu arriveras à faire ce que tu veux avec ces fonctions.
Si chaque élément X, Y, Z, W sont séparés pas des espaces (et n'en comportent pas) ou autre séparateur, des simples opérations de lecture de fichier et d'opérations sur les chaînes de caractères peuvent résoudre tes problèmes.
(Dans tous les cas, il faudra que tu lises le fichier de toute manière)
Ce tuto pourra t'aider :
http://melem.developpez.com/langagec/fichiersc/
Si les éléments sont plus complexes, je ne vois pas trop comment se passer des expressions régulières.
Tu pourrais très bien coder le parser toi-même, ce n'est pas très compliqué. Tiens, c'est un truc dans le genre que tu veux ?
Ce qui va dans ce cas-ci afficher:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include <stdlib.h> #include <string.h> #include <stdio.h> #include <ctype.h> #define BUF_SIZE 256 typedef unsigned int uint_t; void tokenize(char buf[BUF_SIZE][BUF_SIZE], const char *str) { size_t len = strlen(str); uint_t i = 0; uint_t cur_token = 0; uint_t cur_c = 0; for(i = 0; i < len; ++i) { if(isspace(str[i]) && !isspace(str[i + 1])) { ++cur_token; cur_c = 0; } else if(!isspace(str[i])) { buf[cur_token][cur_c] = str[i]; ++cur_c; } else {;} } } int main(void) { const char *foo = "So I heard you liek mudkipz."; char buf[BUF_SIZE][BUF_SIZE] = {{0}}; uint_t i = 0; tokenize(buf, foo); for(i = 0; i < 8; ++i) { printf("buf[%u]: '%s'\n", i, buf[i]); } return EXIT_SUCCESS; }
Citation:
buf[0]: 'So'
buf[1]: 'I'
buf[2]: 'heard'
buf[3]: 'you'
buf[4]: 'liek'
buf[5]: 'mudkipz.'
buf[6]: ''
buf[7]: ''
Ou faire directement appel à la fonction strtok():
man developpez strtok
;-)
j'ai trouver ceci c'est rapide est efficaceCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 * /********************************************************/ * /* */ * /* Utilisation de STRTOK */ * /* Permet de compter le nombre de mot de la phrase */ * /* Permet d'extraire les différents mots */ * /* selon le caractere "space" */ * /* NOTA : Aucun controle dans le prog ! */ * /* */ * /* Créateur : Trinta */ * /* Date de création : 04/06/2003 */ * /* */ * /* Version : 1.0.0 */ * /* Date de modification : 04/06/2003 */ * /* FREEWARE */ * /* */ * /********************************************************/ * * #include <stdio.h> * #include <stdlib.h> * #include <string.h> * * * main ( ) * { * char *pointeur; * char *separateur = { " " }; // Le séparateur * char *buffer; * char *Chaine_Entrante="bonjour je m'appelle Trinita"; * int nb_mot=1; * * buffer = strdup ( Chaine_Entrante ); * * // premier appel, * pointeur = strtok( buffer, separateur ); * printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur); * * while( pointeur != NULL ) * { * // Cherche les autres separateur * pointeur = strtok( NULL, separateur ); * if ( pointeur != NULL ) * { * nb_mot++; // increment du nombre de mot * printf ("Mot de la phrase numero : %d %s\n",nb_mot, pointeur); * } * } * * getchar (); // pause en mode console * * return 0 ; * }