Aide en c
poratokouetha
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
poratokouetha -
poratokouetha -
bonsoir,jai un soucis dans mon programme ,bref jaimerai ecrire un programe qui lit un fichier, le separe grace a la virgule et le stoke dans un autre fichier destinataire par exemple:
1) sante,social,ebola ne connait pas le racisme.
le fichier atendu (fichier destinataire) sera le comme suite:
sante:ebola ne connait pas le racisme.
social:ebola ne connait pas le racisme.
1) sante,social,ebola ne connait pas le racisme.
le fichier atendu (fichier destinataire) sera le comme suite:
sante:ebola ne connait pas le racisme.
social:ebola ne connait pas le racisme.
4 réponses
-
Bonjour,
Il faudrait poster ton programme pour qu'on puisse t'aider.
Utilise les balises "code c" pour le poster.
Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).
Cdlt,-
ok fiddy voici le code et le fichier source
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main ( int arg, char* argv[]){
/* Declaration des variables*/
char c;
int b, tab[1000];
int i;
char srce[1000],desti[1000];
char seps[] =",";/* note d'espace de caratere*/
char *token = (char*)malloc(sizeof(char)*1000) ;
char *string = (char*)malloc(sizeof(char)*1000) ;
char** tabString = (char*)malloc(sizeof(char*)*100) ;;
/*Allocation de l'espace memoire*/
for(i = 0; i <100; i++)
*(tabString + i) = (char*)malloc(sizeof(char)*1000) ;
printf(" Entrer le nom du fichier source:");
scanf ("%s",srce);
/* ouverture du fichier de lecture*/
FILE *src=fopen(srce,"r");
/* on teste si ca existe*/
if(src==NULL){
printf ("il n'existe pas le fichier %s \n",srce);
return 0;
}
/*ouverture du fichier destinataire*/
printf("entrer le fichier destinataire:");
scanf("%s",desti);
FILE *dest=fopen (desti,"w+");
/*operation de separation*/
// token=strtok(string,seps);
int cpt = 0; b=1;
while (! feof(src)){
fgets(token, 1000, src);
string = strtok( token, seps );
while( string != NULL ){
strcpy(*(tabString + cpt), string);
string = strtok( NULL, seps );
cpt++;
}
b = cpt-1;
//char *token1 = (char*)malloc(sizeof(char)*1000) ;
for(i = 0; i < cpt-1; i++){
char *token1 = (char*)malloc(sizeof(char)*1000) ;
strcat(token1, *(tabString + i));
strcat(token1, ":");
strcat(token1, *(tabString + b));
strcat(token1, "\n");
printf(" %s \n", token1);
fputs(token1, dest);
free(token1);
}
}
//fputs (c ,dest);
/*on ferme les descripteur*/
fclose (src);
fclose (dest);
b = getchar();
return 0;
}
-
-
Ce n'est pas les balises "code" que j'ai demandé mais "code c" comme dans mon exemple. Ca mettra les couleurs en plus :-).
Sinon, pourrais-tu décrire précisément le problème que tu obtiens, ça nous aiderait beaucoup.
Déjà, ce que je vois comme petit problème :
char** tabString = (char*)malloc(sizeof(char*)*100) ;;
Pas besoin de 2 points-virgules.
Le cast n'est pas correct. Il faut mettre (char**). Mais le cast est superflu en C puisque le type de malloc est void*. Exemple :char **tabString = malloc(sizeof(char*) * 100);
*(tabString + i)
Pour info, tu peux utiliser tabString[i] qui est plus condensé.
while (! feof(src)){
Attention, feof() ne permet pas de détecter la fin de fichier. Il faut plutôt lire le fichier et vérifier si elle retourne une erreur ou pas.
strcat(token1, *(tabString + i));
token1 a besoin de contenir un '\0'. Il faut donc le mettre après ton malloc().
Petite question : pourquoi utilise de l'allocation dynamique (malloc) avec une taille statique ? Du coup, il ne faut pas oublier tous les free() qui vont bien pour libérer les zones allouées.
b = getchar();
getchar(); tout simplement suffit.
Cdlt, -
#include<stdio.h> #include<string.h> #include<stdlib.h> int main ( int arg, char* argv[]){ /* Declaration des variables*/ char c; int b, tab[1000]; int i; char srce[1000],desti[1000]; char seps[] =",";/* note d'espace de caratere*/ char *token = (char*)malloc(sizeof(char)*1000) ; char *string = (char*)malloc(sizeof(char)*1000) ; char** tabString = (char*)malloc(sizeof(char*)*100) ;; /*Allocation de l'espace memoire*/ for(i = 0; i <100; i++) *(tabString + i) = (char*)malloc(sizeof(char)*1000) ; printf(" Entrer le nom du fichier source:"); scanf ("%s",srce); /* ouverture du fichier de lecture*/ FILE *src=fopen(srce,"r"); /* on teste si ca existe*/ if(src==NULL){ printf ("il n'existe pas le fichier %s \n",srce); return 0; } /*ouverture du fichier destinataire*/ printf("entrer le fichier destinataire:"); scanf("%s",desti); FILE *dest=fopen (desti,"w+"); /*operation de separation*/ // token=strtok(string,seps); int cpt = 0; b=1; while (! feof(src)){ fgets(token, 1000, src); string = strtok( token, seps ); while( string != NULL ){ strcpy(*(tabString + cpt), string); string = strtok( NULL, seps ); cpt++; } b = cpt-1; //char *token1 = (char*)malloc(sizeof(char)*1000) ; for(i = 0; i < cpt-1; i++){ char *token1 = (char*)malloc(sizeof(char)*1000) ; strcat(token1, *(tabString + i)); strcat(token1, ":"); strcat(token1, *(tabString + b)); strcat(token1, "\n"); printf(" %s \n", token1); fputs(token1, dest); free(token1); } } //fputs (c ,dest); /*on ferme les descripteur*/ fclose (src); fclose (dest); b = getchar(); return 0; }
mon veritable proble est que lorsque jentre mon fichier le programe decoupe la premiere ligne mais ne decoupe pas le reste -