Aide en c

poratokouetha Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 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.

4 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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,
    0
    1. poratokouetha
       
      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;

      }


      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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,
    0
  3. poratokouetha
     
     #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
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je ne vois pas les corrections des points que je t'ai signalés...
      0
  4. poratokouetha
     
    je suis entrain de corriger ca fiddy
    0