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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*A modifier si le programme doit etre adapté a un autre projet*/
#define M_CLINE 255
#define M_CCOL2 15 /*Nombre de caractères jusqu'a la 2eme colonne*/
#define STR_(x) #x
#define STR(x) STR_(x)
int main(void)
{
FILE * fp_in = NULL;
FILE * fp_out = NULL;
FILE * fp_in2 = NULL;
FILE * fp_out2 = NULL;
/* Pointeur pour récupérer le retour de fgets() */
char * pLine = NULL;
char * pLine2 = NULL;
/* Tableau contenant la ligne lue par fgets() */
char line[M_CLINE+1 ] = "";
/* Tableau pour stocker la colonne 2 sous forme de chaine de caractères */
char col2[M_CCOL2+1] = "";
/* Tableau pour stocker la colonne 2 lue au coup précédent */
char prevcol2[M_CCOL2+1] = "";
/* Le compteur */
int cpt = 0;
/* Une variable entière dont je me sers pour le traitement des erreurs */
int rc = 0;
/* OUVERTURE FICHIERS */
fp_in = fopen("X04.txt", "r");
if (!fp_in) {
fprintf(stderr, "Impossible d'ouvrir le fichier X04.txt pour lecture.\n");
exit(EXIT_FAILURE);
}
fp_in2 = fopen("Z04.txt", "r");
if (!fp_in2) {
fprintf(stderr, "Impossible d'ouvrir le fichier Z04.txt pour lecture.\n");
exit(EXIT_FAILURE);
}
fp_out = fopen("X04.out.txt", "w");
if (!fp_out) {
fprintf(stderr, "Impossible d'ouvrir le fichier X04.txt pour lecture.\n");
exit(EXIT_FAILURE);
}
fp_out2 = fopen("Z04.out.txt", "w");
if (!fp_out2) {
fprintf(stderr, "Impossible d'ouvrir le fichier Z04.txt pour lecture.\n");
exit(EXIT_FAILURE);
}
/* BOUCLE DE LECTURE ECRITURE */
/* Lecture 1ere ligne */
pLine = fgets(line, sizeof(line)/sizeof(*line), fp_in);
pLine2 = fgets(line, sizeof(line)/sizeof(*line), fp_in2);
++cpt;
while (pLine)
{
/* Récupération de la colonne 2 */
if ( sscanf( line, "%*s %" STR(M_CCOL2) "s %*s %*s",col2) != 1 ) { break; rc = -1; }
/* Remise a un de cpt */
if ( strcmp(col2, prevcol2) ) { cpt = 1; }
/* Ecriture compteur formaté sur 5 digits */
if ( fprintf(fp_out,"%05d", cpt) < 0 ) { break; rc = -1; }
/* Ecriture de la ligne non modifiée après le compteur */
if ( strchr(line, '\n') ) {
if ( fprintf(fp_out,"%s", line) < 0 ) { break; rc = -1; }
}
else {
if ( fprintf(fp_out,"%s\n", line) < 0 ) { break; rc = -1; }
}
while (pLine2)
{
/* Récupération de la colonne 2 */
if ( sscanf( line, "%*s %" STR(M_CCOL2) "s %*s %*s",col2) != 1 ) { break; rc = -1; }
/* Remise a un de cpt */
if ( strcmp(col2, prevcol2) ) { cpt = 1; }
/* Ecriture compteur formaté sur 5 digits */
if ( fprintf(fp_out2,"%05d", cpt) < 0 ) { break; rc = -1; }
/* Ecriture de la ligne non modifiée après le compteur */
if ( strchr(line, '\n') ) {
if ( fprintf(fp_out2,"%s", line) < 0 ) { break; rc = -1; }
}
else {
if ( fprintf(fp_out2,"%s\n", line) < 0 ) { break; rc = -1; }
}
/* Lecture n-ième ligne */
pLine = fgets(line, sizeof(line)/sizeof(*line), fp_in);
++cpt;
pLine2 = fgets(line, sizeof(line)/sizeof(*line), fp_in2);
++cpt;
/* cpt est sur 5 digits, donc de 1 à 99999 */
if (cpt == 100000) { break; rc = -1; }
/* sauvegarde colonne 2 précédente */
strcpy(prevcol2, col2);
}
/* FERMETURE FICHIERS */
/* On enlève le fichier généré si il y a eu un souci */
if (rc < 0 || ferror(fp_in) || !feof(fp_in) || ferror(fp_out) ) {
fclose(fp_in);
fclose(fp_out);
fprintf(stderr, "Une erreur est survenue durant le déroulement de l'application, effacement du X04.out.txt\n");
rc = remove("X04.txt.out");
if (!rc) { fprintf(stderr, "Impossible de supprimer X04.out.txt\n"); }
}
else {
fclose(fp_in);
fclose(fp_out);
}
if (rc < 0 || ferror(fp_in2) || !feof(fp_in2) || ferror(fp_out2) ) {
fclose(fp_in2);
fclose(fp_out2);
fprintf(stderr, "Une erreur est survenue durant le déroulement de l'application, effacement du X04.out.txt\n");
rc = remove("Z04.txt.out");
if (!rc) { fprintf(stderr, "Impossible de supprimer Z04.out.txt\n"); }
}
else {
fclose(fp_in2);
fclose(fp_out2);
}
return 0;
} |