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,
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,
poratokouetha
ok fiddy voici le code et le fichier source
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 :
*(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,
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