C division d'une chaine, lettre précise
jerémiethe7
Messages postés
152
Date d'inscription
Statut
Membre
Dernière intervention
-
amigo -
amigo -
Bonjour,
j'aurais besoin de diviser une chaine en 4 chaines.
Je lis cette grande chaine dans un fichier.txt.
Voici un exemple de mon txt pour mieux comprendre :
0196325874|BARICHELLO|RUBENS|rubens.barichello@honda.jp|
0142536987|BOURDAIS|SEBASTIEN|sebbourdais@estaca.fr|
0159374862|BUTTON|JENSON|jenson.button@honda.jp|
0987321654|HAKKINEN|MIKA|mika_hakkinen@f1.fin|
0963258741|MASSA|FELIPE|felipe.massa@ferrari.it|
en gros une ligne = 4 informations délimitées par des '|'.
J'ai essayé de les extraires, mais sans succès. Voici le code que j'ai fait, il n'est pas optimisé ne fonctionnant pas bien.
int lecture_champs(char *numtel,char *nom,char *prenom,char *email,int taille_totale)
{
char tampon_tel[101],tampon_nom[101],tampon_prenom[101],tampon_mail[101],caractere='0';
int i=0;printf("\n\t\t\t\tNOUVEAU\n");
FILE *repertoire=fopen("Repertoire.txt","r");printf("\t\t\t\t%d entrée\n",taille_totale);
if (repertoire)
{
fseek(repertoire,taille_totale+1,0);
//caractere=fgetc(repertoire); // tel
while (caractere!='|')
{
tampon_tel[i]=caractere;
i++;
caractere=fgetc(repertoire);
}
strcpy(numtel,tampon_tel);i=0;strcpy(tampon_tel,"");
caractere=fgetc(repertoire); // le '|'
printf("%s\n",numtel);
//caractere=fgetc(repertoire); // nom
while (caractere!='|')
{
tampon_nom[i]=caractere;
i++;
caractere=fgetc(repertoire);
}
strcpy(nom,tampon_nom);i=0;strcpy(tampon_nom,"");
//caractere=fgetc(repertoire); // le '|'
printf("%s\n",nom);
caractere=fgetc(repertoire); // prenom
while (caractere!='|')
{
tampon_prenom[i]=caractere;
i++;
caractere=fgetc(repertoire);
}
strcpy(prenom,tampon_prenom);i=0;strcpy(tampon_prenom,"");
//caractere=fgetc(repertoire); // le '|'
printf("%s\n",prenom);
caractere=fgetc(repertoire); // mail
while (caractere!='|')
{
tampon_mail[i]=caractere;
i++;
caractere=fgetc(repertoire);
}tampon_mail[i]='\0';
strcpy(email,tampon_mail);i=0;strcpy(tampon_mail,"");
//caractere=fgetc(repertoire); // le '\n'
printf("%s\n",email);_sleep(5000);
fclose(repertoire);
}
taille_totale+=strlen(numtel)+strlen(nom)+strlen(prenom)+strlen(email)+4;
printf("\t\tsortie %d\n",taille_totale);_sleep(2000);
return taille_totale;
}
Voilà l'appel de cette fonction se fait comme un fscanf. Elle reçoit en argument taille_totale qui correspond au nombre d'octet ou de bits (je ne sais pas torp a vrai dire) qui sera indispensable pour déplacer le curseur de lecture fseek lors du prochain appel. Je ne pense pas qu'on puisse le faire avec un fscanf car des contacts peuvent avoir des noms composés et donc il se peut qu'il y est des espaces.
Voilà je remercie d'avance ceux qui pourront m'aider.
+
j'aurais besoin de diviser une chaine en 4 chaines.
Je lis cette grande chaine dans un fichier.txt.
Voici un exemple de mon txt pour mieux comprendre :
0196325874|BARICHELLO|RUBENS|rubens.barichello@honda.jp|
0142536987|BOURDAIS|SEBASTIEN|sebbourdais@estaca.fr|
0159374862|BUTTON|JENSON|jenson.button@honda.jp|
0987321654|HAKKINEN|MIKA|mika_hakkinen@f1.fin|
0963258741|MASSA|FELIPE|felipe.massa@ferrari.it|
en gros une ligne = 4 informations délimitées par des '|'.
J'ai essayé de les extraires, mais sans succès. Voici le code que j'ai fait, il n'est pas optimisé ne fonctionnant pas bien.
int lecture_champs(char *numtel,char *nom,char *prenom,char *email,int taille_totale)
{
char tampon_tel[101],tampon_nom[101],tampon_prenom[101],tampon_mail[101],caractere='0';
int i=0;printf("\n\t\t\t\tNOUVEAU\n");
FILE *repertoire=fopen("Repertoire.txt","r");printf("\t\t\t\t%d entrée\n",taille_totale);
if (repertoire)
{
fseek(repertoire,taille_totale+1,0);
//caractere=fgetc(repertoire); // tel
while (caractere!='|')
{
tampon_tel[i]=caractere;
i++;
caractere=fgetc(repertoire);
}
strcpy(numtel,tampon_tel);i=0;strcpy(tampon_tel,"");
caractere=fgetc(repertoire); // le '|'
printf("%s\n",numtel);
//caractere=fgetc(repertoire); // nom
while (caractere!='|')
{
tampon_nom[i]=caractere;
i++;
caractere=fgetc(repertoire);
}
strcpy(nom,tampon_nom);i=0;strcpy(tampon_nom,"");
//caractere=fgetc(repertoire); // le '|'
printf("%s\n",nom);
caractere=fgetc(repertoire); // prenom
while (caractere!='|')
{
tampon_prenom[i]=caractere;
i++;
caractere=fgetc(repertoire);
}
strcpy(prenom,tampon_prenom);i=0;strcpy(tampon_prenom,"");
//caractere=fgetc(repertoire); // le '|'
printf("%s\n",prenom);
caractere=fgetc(repertoire); // mail
while (caractere!='|')
{
tampon_mail[i]=caractere;
i++;
caractere=fgetc(repertoire);
}tampon_mail[i]='\0';
strcpy(email,tampon_mail);i=0;strcpy(tampon_mail,"");
//caractere=fgetc(repertoire); // le '\n'
printf("%s\n",email);_sleep(5000);
fclose(repertoire);
}
taille_totale+=strlen(numtel)+strlen(nom)+strlen(prenom)+strlen(email)+4;
printf("\t\tsortie %d\n",taille_totale);_sleep(2000);
return taille_totale;
}
Voilà l'appel de cette fonction se fait comme un fscanf. Elle reçoit en argument taille_totale qui correspond au nombre d'octet ou de bits (je ne sais pas torp a vrai dire) qui sera indispensable pour déplacer le curseur de lecture fseek lors du prochain appel. Je ne pense pas qu'on puisse le faire avec un fscanf car des contacts peuvent avoir des noms composés et donc il se peut qu'il y est des espaces.
Voilà je remercie d'avance ceux qui pourront m'aider.
+
A voir également:
- C division d'une chaine, lettre précise
- Clavier iphone chiffre et lettre - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Chaine tnt gratuite sur mobile - Guide
- Caractere speciaux lettre - Guide
- Changer lettre disque dur - Guide
1 réponse
Bonjour,
Voici un petit programme qui devrait résoudre ton problème,
Il utilise la fonction strtok() pour extraite les infos contenus dans une chaine et délimités par un séparateur précis.
Voici un petit programme qui devrait résoudre ton problème,
Il utilise la fonction strtok() pour extraite les infos contenus dans une chaine et délimités par un séparateur précis.
#include <string.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> int main(void) { char tampon_tel[101],tampon_nom[101],tampon_prenom[101],tampon_mail[101],input[256]; char *p; /* FILE *repertoire=fopen("Repertoire.txt","r");*/ FILE *repertoire = fopen("c:\\test.txt","r"); if (repertoire == NULL) { fprintf (stderr,"\nERREUR D'OUVERTURE DU FICHIER Repertoire.txt\n"); exit (1); } while (fgets (input, 256, repertoire) != NULL) { /* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, "|"); if (p) strcpy(tampon_tel , p);/* printf("-%s-\n", p);*/ /* A second call to strtok using a NULL as the first parameter returns a pointer to the character following the token */ p = strtok(NULL, "|"); if (p) strcpy(tampon_nom , p);/* printf("-%s-\n", p);*/ p = strtok(NULL, "|"); if (p) strcpy(tampon_prenom , p);/* printf("-%s-\n", p);*/ p = strtok(NULL, "|"); if (p) strcpy(tampon_mail , p);/* printf("-%s-\n", p);*/ /*************************************************/ /*coder ici ce que l'on veut faire des infos lues*/ printf("%s\n", tampon_tel); printf("%s\n", tampon_nom); printf("%s\n", tampon_prenom); printf("%s\n\n", tampon_mail); printf("%s\n\n", "Appuyez sur une touche..."); getch(); /*************************************************/ } fclose(repertoire); return 0; }