Eliminer les commentaires d'un fichier c

Fermé
hafed22 Messages postés 9 Date d'inscription mardi 27 novembre 2012 Statut Membre Dernière intervention 31 décembre 2012 - Modifié par hafed22 le 30/12/2012 à 23:52
GrandCaribou Messages postés 28776 Date d'inscription mardi 23 décembre 2008 Statut Modérateur Dernière intervention 19 novembre 2024 - 31 déc. 2012 à 00:57
Bonjour,
La fonction "ELE_com" permit d'éliminer les commentaires d'un fichier c , les commentaires qui commencent par "//......... " ça marche ,mais le problème avec les commentaires par "/*................... */ "

J'ai remarqué que :

-les lignes après /* ne serons pas effacer...
-Je pense que lorsque l'appel a fgets() pour la deuxième fois à l'intérieur de la boucle while le curseur sur INFILE (fichier) ne change pas pour fgets() de la première boucle while c'est-à-dire lorsque un commentaire effacée à l'intérieur de la boucle les lignes après /* et avant */ serons recopié de nouveau par la boucle principale !
s.v.p votre aide !!
Merci d'avance


Mon code:
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
   
          /** fonction qui elemine les commentaires  **/  
ELE_com()  
{FILE* INFILE,*OUTFILE;  
int  l=0,i=0,j=0,pos=0;  
char buf[500],temp[500],c;  
   
   
OUTFILE=fopen("new.txt","w");  
if((INFILE = fopen("test.txt","r"))==NULL)  
 printf("\n ERREUR A L'OUVERTURE, CE FICHIER N'EXISTE PAS\n");  
   
    else  
            {  
   
                /* effacer les commentaires qui commence par // */  
       while(NULL != fgets(buf, sizeof buf,INFILE))  
                 {if(NULL != strstr(buf, "//"))  
                         {  
                          while(buf[l]!='/')  
                           {l++;}  
                           for(i=l;i<strlen(buf);i++)  
                           { buf[i]=' ';}  
                           fprintf(OUTFILE, "%s \n",buf);  
                           }  
   
                 else fprintf(OUTFILE, "%s",buf);  
                    }  
   
 fseek(INFILE, 0,0); // remise a zéro curseur  
   
                // effacer les commentaires /*.....*/  
        while(NULL != fgets(buf, sizeof buf,INFILE))  
            {//  le cas ou nous trouvons */ et /* sur la même linge  
                       if((NULL != strstr(buf, "/*"))&&(NULL != strstr(buf, "*/")))  
                       {{l=0;  
                        while((buf[l]!='/')&&(buf[l]!='\n')) // pour déterminer la position de la commentaire  
                          {buf[l]=' ';l++;}  
                               buf[l]=' ';i=0,l=0;  
                       }}  
                 l=0;i=0;  
                // cas ou nous trouvons une chaine contient  commentaire*/ ou/*commentaire  
                   if((NULL != strstr(buf, "/*"))||(NULL != strstr(buf, "*/")))  
                         {  
                             if(NULL != strstr(buf, "/*"))  
                              {while((buf[l]!='/')&&(buf[l]!='\n')) // pour déterminer la position de la commentaire /*  
                                       {l++;}l--;  
                                      i=strlen(buf)+1;  
                                       while(i!=l)  
                                       {buf[i]=' ';i--;}  
                                       buf[l]=' '; i=0,l=0;fprintf(OUTFILE, "%s\n",buf);  
                             }  
   
            // pour continuer a effacée les linges entre /*... et... */  
                    while((NULL != fgets(buf, sizeof buf,INFILE))&&(NULL != strstr(buf, "*/")))  
                       { fprintf(OUTFILE, "%s"," ");}  
                         printf("%s voila",buf);  
                         if(NULL != strstr(buf,"*/"))  
                          {while((buf[l]!='/')&&(buf[l]!='\n'))  
                           {l++;}  
                          while(i!=l+1)  
                               {buf[i]=' ';i++;}  
                          i=0,l=0;fprintf(OUTFILE, "%s\n",buf);  
                          }  
               else fprintf(OUTFILE, "%s",buf);  
                      }  
                }  
   
fclose(OUTFILE);  
fclose(INFILE);  
                }  
    printf(" \n                  !!     bien,operation reussite !! \n ");  
 return 0 ;  
}  

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 déc. 2012 à 00:34
0
GrandCaribou Messages postés 28776 Date d'inscription mardi 23 décembre 2008 Statut Modérateur Dernière intervention 19 novembre 2024 1 036
31 déc. 2012 à 00:57
Bonsoir,

Merci de rester sur ton post initial :
https://forums.commentcamarche.net/forum/affich-26564394-elemine-les-commentaire-dont-un-fichier-c

Je ferme le sujet.
0