begin process at 2012 05 28 18:37:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

comparaison de 2 fichiers texte à l'aide d'un programme C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comparaison de 2 fichiers texte à l'aide d'un programme C

mardi 17 février 2009 à 11:01:12 | comparaison de 2 fichiers texte à l'aide d'un programme C

Yanis1973

Bonjour tt le monde,
Si quelqu'in pourrait m'aider sur un ce probleme , je serais tiré d'affaire.
merci d'avance.
Voila j'ai un programme en c qui permet de comparer 2 fichiers texte,
et de sortir les lignes modifées dans un fichier résultat.

==> le 1er fichier en entrée: est de la forme suiavnte:
fich1:
II-LP;35554  ;SSS     ;EN;2
II-LP;35574  ;SSS     ;EN;4

==>le 2 fichier en entrée
fich2:
II-LP;35554  ;SSS     ;EN;1
II-LP;35574  ;SSS     ;EN;3

le fichier résultat est liste.tmp est le suivant :

II-LP;35574  ;SGN     ;EN;3
II-LP;35574  ;SGN     ;EN;3


Alors que je m'attendais à un fichier de type :

II-LP;35554  ;SSS     ;EN;1
II-LP;35574  ;SSS     ;EN;3


N.B je ne connais pas trop le c ... c'est juste un programme que je cherche à a adapter à ce besoin::

si y ' a quelqu'un qui peut m'aider à comprendre la fonction void RECOPIE   !!!!!

voila le source::: ( interessant)



voila le  main.c





#include <stdio.h>
#include <string.h>
#include <ctype.h>

/* Parametres ajustables */
/* #define LIGNES_PAR_PAGE  60 */

/* declaration des fonctions */
int main(int, char **);
void verif(int, char **);
void recopie(char *, char *, char *);
void erreur(int, char *);

/* variables globales */
FILE *fin1, *fin2, *fout;
char fichout[100];
char fichin1 [100];
char fichin2 [100];
int app;

/* definition des fonctions */
int main(int argc, char * argv[])
{
verif(argc,argv);

if ((fin1=fopen(fichin1,"r")) == NULL) erreur(3,fichin1);
if ((fin2=fopen(fichin2,"r")) == NULL) erreur(3,fichin2);

if ((fout=fopen(fichout,"w")) == NULL)
    {fclose(fin1);fclose(fin2);
     erreur(4,fichout);
  }

recopie(fichin1, fichin2, fichout);
if (fclose(fout) != 0) erreur(5, fichout);
if (fclose(fin1) != 0) erreur(5, fichin1);
if (fclose(fin2) != 0) erreur(5, fichin2);

/* printf("\n\n %5d lignes ont ete copiees", nlignetot);*/

}

void verif(int argc, char **argv)
/*  verification des parametres  */
{
int i,j,k,l,min,max;
char arg[100];
char c1,c2,c3;
char lin[255];
/* valeurs par defaut */

strcpy(fichin1,"$$$$$$$");
strcpy(fichin2,"$$$$$$$");
strcpy(fichout,"$$$$$$$");
/*
printf("les fichiers sont : %s, %s\n", fichin, fichout);
*/

for (i=1; i<argc; i++)
  {strcpy(arg, argv[i]);
    if (arg[0] == '-' )
     switch (arg[1]) {
       case '?': erreur(6," ");
                 break;
       default : erreur(6,arg);
     }
     else {
     if ( strcmp(fichin1,"$$$$$$$") == 0 )
       strcpy(fichin1,arg);
     else {
       if ( strcmp(fichin2,"$$$$$$$") == 0 )
       strcpy(fichin2,arg);
       else
        {if ( strcmp(fichout,"$$$$$$$") == 0 )
           strcpy(fichout,arg);
         else
           erreur(6, "trop de nom de fichier");
        }
      }
    }
  }
if ( strcmp(fichout,"$$$$$$$") == 0 )
   strcpy(fichout, "liste.tmp");
/*
printf("les fichiers sont : %s, %s\n", fichin, fichout);
*/
}

void recopie(char *source1, char *source2, char *cible)
{
char lin1[2255], lin2[2255], lin1a[100], lin2a[100], lin2as[100], lin2as_old[100];
int page, ligne, i, j, k, l  ;
int cmp, multi, nbmulti;
int ficOrg, ficOrg2;
char tlp[10][300];

page=0; ligne=0; nbmulti=multi=0;
strcpy(lin2as_old,"xxx");
fgets(lin1,2255,fin1);
fgets(lin2,2255,fin2);
strncpy(lin1a,&lin1[2],6);
lin1a[5]=0;
if(strcmp(lin1a, "EN-OS") == 0) ficOrg=1; else ficOrg=0;
strncpy(lin2a,&lin2[2],6);
lin2a[5]=0;
if(strcmp(lin2a, "EN-OS") == 0) ficOrg2=1; else ficOrg2=0;
if (ficOrg != ficOrg2) erreur(8, "fichiers incoherents");
while (feof(fin1)==0 || feof(fin2)==0)
  {
     if(ficOrg) {
           strncpy(lin1a,&lin1[8],4);
           lin1a[4]=0;
           strncpy(lin2a,&lin2[8],4);
           lin2a[4]=0;
     } else {
           strncpy(lin1a,&lin1[0],5);
           lin1a[5]=0;
           strncpy(lin2a,&lin2[0],5);
           lin2a[5]=0;

           if (strcmp(lin2a, "II-LP") == 0 || strcmp(lin2a, "II-ED") == 0 ){
             i=j=0;
             for(k=7; k<24; k++)if(lin2[k]==';'&& i==0)i=k;
             strncpy(lin2as,lin2,i);
             lin2as[i] = 0;
             if (strcmp(lin2as, lin2as_old) == 0) {
                nbmulti = nbmulti+1;
                if(nbmulti > 10) erreur(6,"10");
                } else {
                if (multi==1) {
                  /* printf("Ecriture %s \n", lin2as_old); */
                   for(i=1;i<=nbmulti;i++) fputs(&tlp[i][0],fout);
                   multi=0;
                   }
                nbmulti = 0;
                strcpy(lin2as_old, lin2as);
                }
                strcpy(&tlp[nbmulti][0], lin2);
             }
     }
     if (feof(fin1)==0 && feof(fin2)==0)
        {cmp= strcmp(&lin1[2], &lin2[2]);
         if (cmp != 0 && ficOrg) {
           if(strcmp(lin1a, lin2a) == 0) { /* mise à jour */
             fgets(lin1,2255,fin1);
             cmp=1;
             }
           }
         if (cmp != 0 && !ficOrg) {  /* si ligne modif : OK */
           if (strcmp(lin1a, lin2a) != 0) {
/* ordre = II-EM < II-PI > II-CJ < II-ST > II-LP > II-ED   */
             if(strcmp(lin1a, "II-PI") == 0 && strcmp(lin2a, "II-CJ") == 0) cmp= -1;
             if(strcmp(lin1a, "II-ST") == 0 && strcmp(lin2a, "II-LP") == 0) cmp= -1;
             if(strcmp(lin1a, "II-LP") == 0 && strcmp(lin2a, "II-ED") == 0) cmp= -1;
             }
           }
        }
     if (feof(fin1)==0 && feof(fin2)!=0)
        cmp= -1;
     if (feof(fin1)!=0 && feof(fin2)==0)
        cmp= +1;
     if (cmp ==0) {
       fgets(lin1,2255,fin1);
       fgets(lin2,2255,fin2);
     }
     if (cmp < 0) {
       if (ficOrg) {
/* si code unité de longueur variable, remplacer 14 par la position après le 3e ; */
         lin1[14] = '0';
         fputs(lin1,fout);
         }
       fgets(lin1,2255,fin1);
     }
     if (cmp > 0) {
       if (strcmp(lin2a, "II-LP") == 0 || strcmp(lin2a, "II-ED") == 0 ){
         multi=1;
       } else {
       fputs(lin2,fout);
       }
       fgets(lin2,2255,fin2);
     }
  }
                if (multi==1) {
                   /*printf("Ecriture %s \n", lin2as_old); */
                   for(i=1;i<=nbmulti;i++) fputs(&tlp[i][0],fout);
                   }

/*
printf("\n %5d lignes copiees de %s sur %s,ligne,source,cible);
nlignetot=nlignetot+ligne;
*/
}

void erreur(int no, char *str)
{
char *msg[] = {"nombre de parametres incorrect",
                "erreur de syntaxe",
                "fichier impossible a ouvrir",
                "fichier impossible a ouvrir ou a creer",
                "erreur a la fermeture du fichier",
                "les parametres connus sont: fic_in1 fic_in2 fic_out",
                "erreur conversion numerique",
                "fichier historique impossible a ouvrir",
                "nombre d'historique Langue/Education trop petit"};
printf("\n *** %s : %s\n",msg[no-1],str);
exit(1);
}



Cette discussion est classée dans : erreur, char, ii, lp, if


Répondre à ce message

Sujets en rapport avec ce message

Erreur DeviceIoControl ??? pk acces refusé ? [ par akk ] Bonjour,Voila lorsque j'execute ce code :(on passe le nom du lecteur en parametre exemple : main C)#include #include <iostre Comment forcer le RTS pour une liaison RS232 [ par ancat ] Bonjourje viens de faire un petit prog (grandement inspire de sources du site) mais je ne saisis pas trop le controle du RTS.Celui ci est-il traite pa erreur de compilation [ par Battousai ] salut tt le monde !1. pour quoi la ligne suivante est erronée ou plutot n'est pas accepte par le compilateur que j'utilise(turbo borland c++)char * ec erreur a l'execution [ par vangeurmasker ] J'ai créé un projet sous VC++ 6 pour faire une calcullette qui annalyse une chaine entrée. Lors de la compilation je n'ai aucune erreur. C'est a l'exe char** vers const char** [ par vecchio56 ] J'ai une erreur assez bizarre, sous VC++ 7.1. Ca compile avec l'option /TC (compilo C), mais pas /TP (compilo C++): typedef struct _A {   int nElemen prob tableau de pointeurs [ par fred111111 ] ben voila , j'ai un petit souci pour un prog que je dois réaliser pour un cours. Il s'agit en fait d'un pendu, avec un dictionnaire contenu dans un fi erreur sur l'entré d'1 char [ par ddd666 ] salut, voila je demande de rentré a lutilisateur un nopm ki é une chaine de caractère char, jaimeré que si celui-ci tape un nombre ca lui redemande de cast c++ [ par mnaulet ] Bonjour,Est-il possible de supprimer les erreurs du compilateur sur les cast en c++.J'ai l'erreur suivante lors de l'appel à la fonction suivante :get Problème de char et dans une struct [ par yggy ] dans ce code : il me dit une erreur après le char dbmdp[7][5] je vois pas mon erreur!ai-je fait quelque chose de faux?struct ServerTest1{   char dbmdp Fonction erreur [ par logant83 ] Bonsoir, voila alors j'essay de faire retourner a ma fonction 'char *splitnick(char *mot)"' une valeur char (logique je sais) mais voila dés que je co


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,087 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales