Ecriture dans un fichier

Ecriture dans un fichier - C - Programmation

Marsh Posté le 02-01-2006 à 19:31:54    

J' aimerais ecrire dans un fichier la lettre que j'iapu recuperer d'un arbre.
 
Voila le code

Code :
  1. void TraduireEnTexte(Arbre a,char *Fsource,char *Fdest)
  2. {
  3.     FILE *fTxt;
  4.     char c;
  5.     char ligne[100];
  6.     char morse[100];
  7.    
  8.     char lettre;
  9.     char *code;
  10.     int i;
  11. int j;
  12. FILE *FenTexte;
  13. /******************************/
  14. fTxt=fopen(Fsource,"r" );
  15. FenTexte=fopen(Fdest,"w" );
  16.    
  17.     if(fTxt==NULL) printf("Fichier existe pas\n" );
  18.     else
  19.     {
  20.           c=fgets(ligne,100,fTxt);
  21.           while(c!=NULL)
  22.           {
  23.               i=0;
  24.               while (ligne[i]!='\0')
  25.               {     
  26.                     j=0;
  27.                     while (ligne[i]!='$')
  28.                     {   
  29.                           morse[j]=ligne[i]; 
  30.                           printf("Boucle morse et ligne" );
  31.                           j++;
  32.                           i++;
  33.                     }
  34.                    i++;
  35.                  
  36.                    if (strcmp(morse," * " )==0)  fprintf(FenTexte," " );
  37.                    else
  38.                    {
  39.                                       int k;
  40.                        k=strlen(morse)+1;
  41.                        code=(char*) malloc(sizeof(char)*k);
  42.                        strcpy(code, morse);
  43.                        printf("Insere file" );
  44.                        lettre=ConvertirMorse(code, a);
  45.                        printf("\n %c",lettre);
  46.                        fprintf(FenTexte,"%c",lettre);
  47.                    }               
  48.               }
  49.               c=fgets(ligne,100,fTxt);
  50.               fprintf(FenTexte,"\n" );
  51.          }
  52.      }
  53.    fclose(fTxt);
  54.    fclose(FenTexte);
  55. }

Reply

Marsh Posté le 02-01-2006 à 19:31:54   

Reply

Marsh Posté le 02-01-2006 à 21:47:32    

Pfff... rarement vu code aussi immonde
1) tu testes l'ouverture de "fTxt" mais pas celui de "FenTexte"
2) tu fais un fclose de "fTxt" même s'il n'a pas été ouvert (à ce moment là, la variable vaut "NULL" )
3) tu fais un malloc sans faire de free et sans renvoyer la zone allouée qui sera donc perdue
4) tu recopies "morse" dans "code" sans réelle utilité apparente
5) la fonction appelante n'a aucun moyen de savoir que le fichier n'a pas été ouvert
6) tu mets trop de commentaires
 
Mis à part ces soucis, ton code est parfait. L'instruction "fprintf(FenTexte, " " ) écrit bien un espace dans ton fichier bien que l'instruction "fputc(' ', FenTexte)" fasse pareil mais en plus rapidement; et l'instruction "fprintf(FenTexte, "%c", lettre)" écrit bien la lettre voulue dans le fichier. Je vois pas de quoi tu te plains...

Message cité 1 fois
Message édité par Sve@r le 02-01-2006 à 21:56:21
Reply

Marsh Posté le 03-01-2006 à 21:14:24    

Sve@r a écrit :

Pfff... rarement vu code aussi immonde
1) tu testes l'ouverture de "fTxt" mais pas celui de "FenTexte"
2) tu fais un fclose de "fTxt" même s'il n'a pas été ouvert (à ce moment là, la variable vaut "NULL" )
3) tu fais un malloc sans faire de free et sans renvoyer la zone allouée qui sera donc perdue
4) tu recopies "morse" dans "code" sans réelle utilité apparente
5) la fonction appelante n'a aucun moyen de savoir que le fichier n'a pas été ouvert
6) tu mets trop de commentaires
 
Mis à part ces soucis, ton code est parfait. L'instruction "fprintf(FenTexte, " " ) écrit bien un espace dans ton fichier bien que l'instruction "fputc(' ', FenTexte)" fasse pareil mais en plus rapidement; et l'instruction "fprintf(FenTexte, "%c", lettre)" écrit bien la lettre voulue dans le fichier. Je vois pas de quoi tu te plains...


 
AVec le code que voila ça fonctionne pourquoi ça ne marche pas avec celui de  dessus
Il ecrit dans le sens inverse(ecrit le code morse et non pas le texte)

Code :
  1. void TraduireEnMorse(Liste l,char *Fsource,char *Fdest)
  2. {
  3. /*****Travaile sur fichier code*///
  4. FILE *Fcode;
  5. char *c;
  6. char ligne[100];
  7. int i;
  8. char *recupMorse;
  9. /**********************************/
  10.  
  11.  
  12. /******Fichier convert****************/
  13. FILE *FenMorse;
  14. /******************************/
  15.  
  16. Fcode=fopen(Fsource,"r" );
  17. FenMorse=fopen(Fdest,"w" );
  18. if(Fcode==NULL) printf("Fichier existe pas\n" );
  19.     else
  20.     {
  21.         while((c=fgets(ligne,100,Fcode))!=NULL)
  22.         {
  23.    i=0;
  24.   // while((ligne[i]!='\0') && (i<strlen(ligne)))
  25.    while(ligne[i]!='\0')
  26.   {
  27.    if(ligne[i]==' ')
  28.    {
  29.     fprintf(FenMorse," * $" );  
  30.    }
  31.    else if (ligne[i]=='\n')
  32.    {
  33.     fprintf(FenMorse,"\n" );
  34.    }
  35.    else
  36.    {
  37.     recupMorse = RechercheMorseListe(ligne[i],l);
  38.     if (recupMorse==NULL)
  39.                     {
  40.                        printf("Cette lettre %c n'existe pas.",ligne[i]);
  41.                        fprintf(FenMorse,"ERR" );
  42.                     }
  43.     else fprintf(FenMorse,"%s$",recupMorse);  
  44.    }
  45.    i++;
  46.   }
  47.         }
  48.    }
  49.    fclose(Fcode);
  50.    fclose(FenMorse);
  51. }


 
C'est quasiment le même que l'autre

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed