1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
void retrait_blanc (char* chaine, char cible[]);
void traitement_fichiers(char* filename1, char* filename2,char* delta);
char* formater_valeur (char* token);
int traitement_valeurs (int valeurs1, int valeurs2,float precision);
int traitement_ligne (char* ligne, float valeurs[]);
#include "Diff_txt.h"
#define BUFFSIZE 256
#define OK 0
#define KO 1
//recuperation des fichiers et du delta
void main(int argc, char** argv){
if(argc != 4)
printf("Usage: <%s> <file1> <file2> <DELTA> \n", argv[0]);
else
traitement_fichiers(argv[1], argv[2], argv[3]);
}
//si le caractere different est un chiffre comparer l'ecart à delta
int traitement_valeurs (int valeurs1, int valeurs2, float precision) {
if(valeurs1 == valeurs2){
return OK;
}
else if (((valeurs1 - valeurs2)||(valeurs2 - valeurs1)) <= precision
&&
(((valeurs1 - valeurs2)/valeurs1) <= precision)){
return OK;
}
return KO;
}
//épurer les lignes des fichier en supprimant tous les blancs
void retrait_blanc (char* chaine, char cible[]){
int i=0, j=0;
for (i = 0; i < (int)strlen(chaine); i++){
if(chaine[i] != ' ')
cible[j++] = chaine[i];
}
cible[j] = '\0';
}
void traitement_fichiers(char* filename1, char* filename2, char* delta){
int k = 0;
char buf1[BUFFSIZE];
char buf2[BUFFSIZE];
char ligne1[BUFFSIZE];
char ligne2[BUFFSIZE];
char courant1;
char courant2;
FILE *file1 = NULL;
FILE *file2 = NULL;
FILE *file3 = NULL;
float precision=atof(delta);
if((file1 = fopen(filename1, "r")) == NULL) {
fprintf(stderr, "Erreur à l'ouverture du fichier <%s>\n", filename1);
exit(1);
}
if((file2 = fopen(filename2, "r")) == NULL){
fprintf(stderr, "Erreur à l'ouverture du fichier <%s>\n", filename2);
exit(1);
}
do{
fgets(buf1,BUFFSIZE, file1);
fgets(buf2,BUFFSIZE, file2);
k++; //pour le numero de ligne
retrait_blanc (buf1, ligne1);
retrait_blanc (buf2, ligne2);
if(strcmp(ligne1, ligne2) != 0) {
if((file3 = fopen("resultat", "a")) == NULL) {
fprintf(stderr, "Erreur à l'ouverture du fichier resultat\n");
exit(1);
}
if (isalpha(courant1 = getc(file1))==0 && isalpha(courant2 = getc(file2))==0){
if(traitement_valeurs (courant1, courant2, precision) == KO) {
fprintf(file3, "%s(ligne %d):\t%s\n", filename1, k, buf1);
printf("%s(ligne %d):\t%s\n", filename1, k, buf1);
fprintf(file3, "%s(ligne %d):\t%s\n", filename2, k, buf2);
printf("%s(ligne %d):\t%s\n", filename2, k, buf2);
}
}
buf1[0]='\0';buf2[0]='\0';
ligne1[0]='\0';ligne2[0]='\0';
}
}
while(!feof(file1) && !feof(file2));
fclose(file1);
fclose(file2);
fclose(file3);
} |
Partager