#define TAILLE_MAX 100000 // la taille maximum d'un fichier ( aproximatif, si tu doit faire ca avec un + gros prgm, agrandit et tout le reste te suivra) #include #include #include //La fonction remplace effectue un remplacement, dans une chaine, d'une sous-chaine par une autre. //Il faut que la sous-chaine de remplacement soit de même longueur que la sous-chaine à remplacer. //Les tailles des chaînes doivent être indiqué (cela évite d'avoir à inclure string.h) void remplace(char* chaine, const int tailleChaine, const char* from, const char* to, const int tailleRemplacement) { int i = 0, j = 0, ok = 0; while (i < tailleChaine - tailleRemplacement) { if (chaine[i] == from[0]) { ok = 1; j = 0; while (ok && j < tailleRemplacement) { if (chaine[i+j] != from[j]) { ok = 0; } j++; } if (ok) { for (j = 0; j < tailleRemplacement; j++) { chaine[i+j] = to[j]; } i += tailleRemplacement - 1; } } i++; } } void clean(const char *buffer, FILE *fp) { char *p = strchr(buffer,'\n'); if (p != NULL) *p = 0; else { int c; while ((c = fgetc(fp)) != '\n' && c != EOF); } } int main(int argc, char* argv[]) { char tableau[TAILLE_MAX] = {0}; // voila le tableau initialisé ! char sRemplacement[25] = {0}; int i =0,z =0 ,y = 0; // des variables (je mets souvent des noms de variable completement stupides lors que j'y stock un nombre char nom_fichier_A[255] = {0}; char nom_fichier_B[255] = {0}; FILE* fichier_A = NULL; // On a 2 fichiers a ouvrir / créer FILE* fichier_B = NULL; // il faut mettre un tiret bas et pas un espace (Google est ton ami si tu veut vraiment garder ton espace dans ton nom fichier)... if (argc > 1) { for (i = 1; i < argc; i++) { //le premier argument donne le nom de fichier_A //le second, le nom de fichier_B //a moins qu'on est reçu un argument -h, --help, help, -?, /?, /h, /help if (argv[i][0] == '-' || argv[i][0] == '/' || argv[i][0] == 'h') { if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "help") == 0 || strcmp(argv[i], "-?") == 0 || strcmp(argv[i], "/?") == 0 || strcmp(argv[i], "/h") == 0 || strcmp(argv[i], "/help") == 0 ) { printf ("\nUsage: Interface.exe [source [destination]] [help]\n\n source: nom du fichier source\n destination: nom du fichier de destination\n help: affiche ce message d'aide (-h, /h, -?, /?, /help, --help)\n\nExemple: Interface.exe WM408.txt WM508.txt\n Interface.exe WM408.txt\n Interface.exe\n\n"); exit(0); } } if (strcmp(nom_fichier_A, "") == 0) { strcpy(nom_fichier_A, argv[i]); } else if (strcmp(nom_fichier_B, "") == 0) { strcpy(nom_fichier_B, argv[i]); } } } //Ok, on a récupéré nos arguments. //Maintenant, on demande à l'user les infos éventuellement manquantes if (strcmp(nom_fichier_A, "") == 0) { //On a besoin d'un nom_fichier_A printf("Veuillez indiquer le nom du fichier source: "); fgets(nom_fichier_A, sizeof(nom_fichier_A), stdin); clean(nom_fichier_A, stdin); } printf("Nom du fichier source: %s\n", nom_fichier_A); if (strcmp(nom_fichier_B, "") == 0) { //On a besoin d'un nom_fichier_A printf("Veuillez indiquer le nom du fichier de destination: "); fgets(nom_fichier_B, sizeof(nom_fichier_B), stdin); clean(nom_fichier_B, stdin); } printf("Nom du fichier de destination: %s\n", nom_fichier_B); //On ouvre les fichiers printf("\nOuverture des fichiers:\n Fichier source: ........... "); fichier_A = fopen(nom_fichier_A, "r"); if (!fichier_A) { printf("echec\n\nLe fichier '%s' est inexistant ou inaccessible, veuillez verifier le nom du fichier avant de continuer.\n", nom_fichier_A); exit(1); } else { printf("ok\n Fichier de destination: ... "); } fichier_B = fopen(nom_fichier_B, "w"); if (!fichier_B) { printf("echec\n\nImpossible d'ouvrir ou de creer le fichier '%s', veuillez verifier que le disque n'est pas plein ou proteger en ecriture.\n", nom_fichier_B); exit(1); } else { printf("ok\n\n"); } printf("Traitement en cours, veuillez patienter ... "); //Chargement du fichier dans tableau do { tableau[z] = fgetc( fichier_A); // On lit le caractère qu'on stocke dans tableau[z] if (tableau[z] == 24) { printf("Aïe !!! Il va falloir trouver un autre caractère de remplacement !"); exit(2); } z++; // le prochain caractère s'écrira dans la prochaine case du tableau } while ( tableau[z-1] != EOF ); // On aurait pu lire ligne par ligne avec fgets mais on aurait pas pu savoir le nombre de caractère du texte.( il aurait du faire une boucle avec tableau[], alors je préfère remplacer un s par un c :D) z--; //Remplacements : //Pour ne pas être embêter avec l'ordre des remplacements, //Je ne remplace pas directement Pxx par Pyy. Je vais //bien remplacer xx par yy, mais P sera remplacé par //un caractère qui ne devrait, a priori, jamais être présent //dans tableau. //Le caractère SUB (subsititu, code = 26) se prêtera très bien pour ça sprintf(sRemplacement, "%c%s", 24, "16"); remplace(tableau, z, "P01", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "17"); remplace(tableau, z, "P02", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "18"); remplace(tableau, z, "P03", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "19"); remplace(tableau, z, "P04", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "20"); remplace(tableau, z, "P05", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "21"); remplace(tableau, z, "P06", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "22"); remplace(tableau, z, "P07", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "23"); remplace(tableau, z, "P08", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "24"); remplace(tableau, z, "P09", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "25"); remplace(tableau, z, "P10", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "26"); remplace(tableau, z, "P11", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "27"); remplace(tableau, z, "P12", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "07"); remplace(tableau, z, "P13", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "12"); remplace(tableau, z, "P14", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "04"); remplace(tableau, z, "P15", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "10"); remplace(tableau, z, "P16", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "11"); remplace(tableau, z, "P17", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "06"); remplace(tableau, z, "P18", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "08"); remplace(tableau, z, "P19", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "01"); remplace(tableau, z, "P20", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "02"); remplace(tableau, z, "P21", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "05"); remplace(tableau, z, "P22", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "03"); remplace(tableau, z, "P23", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "09"); remplace(tableau, z, "P24", sRemplacement, 3); //Voilà, tous les remplacements ont été effectués. Il ne nous reste plus qu'à //remplacé notre caractère SUB par P pour retrouver notre chaîne correcte sprintf(sRemplacement, "%c", 24); remplace(tableau, z, sRemplacement, "P", 1); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "25"); remplace(tableau, z, "TOOL POSITION NUMBER : 10", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "26"); remplace(tableau, z, "TOOL POSITION NUMBER : 11", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "27"); remplace(tableau, z, "TOOL POSITION NUMBER : 12", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "7 "); remplace(tableau, z, "TOOL POSITION NUMBER : 13", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "12"); remplace(tableau, z, "TOOL POSITION NUMBER : 14", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "4 "); remplace(tableau, z, "TOOL POSITION NUMBER : 15", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "10"); remplace(tableau, z, "TOOL POSITION NUMBER : 16", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "11"); remplace(tableau, z, "TOOL POSITION NUMBER : 17", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "6 "); remplace(tableau, z, "TOOL POSITION NUMBER : 18", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "8 "); remplace(tableau, z, "TOOL POSITION NUMBER : 19", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "1 "); remplace(tableau, z, "TOOL POSITION NUMBER : 20", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "2 "); remplace(tableau, z, "TOOL POSITION NUMBER : 21", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "5 "); remplace(tableau, z, "TOOL POSITION NUMBER : 22", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "3 "); remplace(tableau, z, "TOOL POSITION NUMBER : 23", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c %s", 24, "9 "); remplace(tableau, z, "TOOL POSITION NUMBER : 24", sRemplacement, 25); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "16"); remplace(tableau, z, "TOOL POSITION NUMBER : 1", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "17"); remplace(tableau, z, "TOOL POSITION NUMBER : 2", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "18"); remplace(tableau, z, "TOOL POSITION NUMBER : 3", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "19"); remplace(tableau, z, "TOOL POSITION NUMBER : 4", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "20"); remplace(tableau, z, "TOOL POSITION NUMBER : 5", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "21"); remplace(tableau, z, "TOOL POSITION NUMBER : 6", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "22"); remplace(tableau, z, "TOOL POSITION NUMBER : 7", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "23"); remplace(tableau, z, "TOOL POSITION NUMBER : 8", sRemplacement, 24); sprintf(sRemplacement, "TOOL POSITION NUMBER %c%s", 24, "24"); remplace(tableau, z, "TOOL POSITION NUMBER : 9", sRemplacement, 24); sprintf(sRemplacement, "%c", 24); remplace(tableau, z, sRemplacement, ":", 1); //Remplacements : //Pour ne pas être embêter avec l'ordre des remplacements, //Je ne remplace pas directement Pxx par Pyy. Je vais //bien remplacer xx par yy, mais P sera remplacé par //un caractère qui ne devrait, a priori, jamais être présent //dans tableau. //Le caractère SUB (subsititu, code = 22) se prêtera très bien pour ça sprintf(sRemplacement, "%c%s", 24, "16"); remplace(tableau, z, "T01", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "17"); remplace(tableau, z, "T02", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "18"); remplace(tableau, z, "T03", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "19"); remplace(tableau, z, "T04", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "20"); remplace(tableau, z, "T05", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "21"); remplace(tableau, z, "T06", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "22"); remplace(tableau, z, "T07", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "23"); remplace(tableau, z, "T08", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "24"); remplace(tableau, z, "T09", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "25"); remplace(tableau, z, "T10", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "26"); remplace(tableau, z, "T11", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "27"); remplace(tableau, z, "T12", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "07"); remplace(tableau, z, "T13", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "12"); remplace(tableau, z, "T14", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "04"); remplace(tableau, z, "T15", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "10"); remplace(tableau, z, "T16", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "11"); remplace(tableau, z, "T17", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "06"); remplace(tableau, z, "T18", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "08"); remplace(tableau, z, "T19", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "01"); remplace(tableau, z, "T20", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "02"); remplace(tableau, z, "T21", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "05"); remplace(tableau, z, "T22", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "03"); remplace(tableau, z, "T23", sRemplacement, 3); sprintf(sRemplacement, "%c%s", 24, "09"); remplace(tableau, z, "T24", sRemplacement, 3); //Voilà, tous les remplacements ont été effectués. Il ne nous reste plus qu'à //remplacé notre caractère SUB par P pour retrouver notre chaîne correcte sprintf(sRemplacement, "%c", 24); remplace(tableau, z, sRemplacement, "T", 1); sprintf(sRemplacement, "%c%s", 24, "M518"); remplace(tableau, z, "WM408", sRemplacement, 5); //Voilà, tous les remplacements ont été effectués. Il ne nous reste plus qu'à //remplacé notre caractère SUB par P pour retrouver notre chaîne correcte sprintf(sRemplacement, "%c", 24); remplace(tableau, z, sRemplacement, "W", 1); //Maintenant, il ne reste plus qu'à faire la même chose avec d'autres types de remplacements (Txx => Tyy) //mais je vais pas me taper tout le boulot :o //On peut ensuite sauvegarder notre fichier dans fichier_B sRemplacement[0] = ' '; while(y != z) // y est une variable qui définit l'avancement dans le texte et donc dans la chaine donc tans qu'on est pas au bout (z) on continue à lire la chaine { if (sRemplacement[0] == ':' && tableau[y] != ' ') { fputc(' ', fichier_B); } sRemplacement[0] = tableau[y]; fputc(tableau[y], fichier_B) ; // on ecrit le signe de tableau[y] dans le fichier_B y++; //et on lira ensuite le caractère suivant [y+1] } fclose(fichier_A); // et on ferme les fichiers fclose(fichier_B); //et on ferme les fichiers ( moi un adepte du copier coller? Jamais! enfin peut etre..) return 0; // c'est la fin } //c'est la fin ( moi un adepte du copier coller? Jamais! enfin peut etre..) // si tu viens si bas dans les contrées perdu de la programmation c'est peut etre pour savoir le -1: // si on continue c'est seulement si le caractère qu'on viens de lire ne vaut pas EOF. or , on viens de modifier z (z++;) //alors le caractère est stocké dans z-1 et plus dans z c'est donc z-1 qu'on veut tester