#include <stdio.h> #include <stdlib.h> #include <string.h> #define READING_HEADER 0 #define READING_VALUES 1 int main() { FILE* lpFile; long nSize; char* lpFileContent; char lpPreviousHeader[20]; char lpCurrentHeader[20]; int nState; int nResult; long nI; long nJ; nResult = 1; /* Ouverture du fichier */ lpFile = fopen("input.txt", "rb"); if (! lpFile) { printf("Echec de l'ouverture du fichier d'entrée\n"); goto the_end; } /* Récupération de la taille du fichier */ fseek(lpFile, 0, SEEK_END); nSize = ftell(lpFile); if (! nSize) { printf("Le fichier d'entrée est vide\n"); goto close_file; } fseek(lpFile, 0, SEEK_SET); /* Allocation d'un tampon pour récupérer le contenu du fichier */ lpFileContent = (char*)malloc(nSize + 1); if (! lpFileContent) { printf("Echec de l'allocation de %ld octets\n", nSize); goto close_file; } /* Lecture du fichier et ajout d'un zéro terminal */ if (fread(lpFileContent, 1, nSize, lpFile) != nSize) { printf("Echec de la lecture du fichier\n"); goto free_memory; } lpFileContent[nSize] = 0; nI = 0; nJ = 0; nState = READING_HEADER; lpPreviousHeader[0] = 0; while (lpFileContent[nI]) { switch (lpFileContent[nI]) { case '[': printf("V{'ANI'= "); break; case ']': printf("};\n"); nState = READING_HEADER; break; case '\n': case '\r': case ';': break; case ' ': if (nState == READING_HEADER) { lpCurrentHeader[nJ] = 0; if (strcmp(lpCurrentHeader, lpPreviousHeader)) { printf("%s\n", lpCurrentHeader); strcpy(lpPreviousHeader, lpCurrentHeader); } nState = READING_VALUES; nJ = 0; } else printf(" "); break; default: if (nState == READING_HEADER) { lpCurrentHeader[nJ] = lpFileContent[nI]; nJ++; } else printf("%c", lpFileContent[nI]); } nI++; } nResult = 0; free_memory: free(lpFileContent); close_file: fclose(lpFile); the_end: return nResult; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define READING_HEADER 0 #define READING_VALUES 1 #define LINE_BEGINNING "V{'ANI'= " #define LINE_ENDING "};\n" int main() { FILE* lpInputFile; FILE* lpOutputFile; long nSize; char* lpInputBuffer; char* lpOutputBuffer; char lpPreviousHeader[20]; char lpCurrentHeader[20]; char lpVectorSeparator[40]; int nState; int nResult; long nI; long nJ; long nK; nResult = 1; /* Ouverture des fichiers */ lpInputFile = fopen("input.txt", "rb"); if (! lpInputFile) { printf("Echec de l'ouverture du fichier d'entrée\n"); goto the_end; } lpOutputFile = fopen("output.txt", "w+"); if (! lpOutputFile) { printf("Echec de l'ouverture du fichier de sortie\n"); goto close_input_file; } /* Récupération de la taille du fichier */ fseek(lpInputFile, 0, SEEK_END); nSize = ftell(lpInputFile); if (! nSize) { printf("Le fichier d'entrée est vide\n"); goto close_output_file; } fseek(lpInputFile, 0, SEEK_SET); /* Allocation d'un tampon pour récupérer le contenu du fichier */ lpInputBuffer = (char*)malloc(nSize + 1); if (! lpInputBuffer) { printf("Echec de l'allocation de l'entrée : %ld octets\n", nSize + 1); goto close_output_file; } /* Allocation d'un tampon pour récupérer le contenu du fichier */ /* Attention : La taille nécessaire est approximé par deux fois la taille de l'entrée */ lpOutputBuffer = (char*)malloc(nSize * 2); if (! lpOutputBuffer) { printf("Echec de l'allocation de la sortie : %ld octets\n", nSize * 2); goto free_input_memory; } /* Lecture du fichier et ajout d'un zéro terminal */ if (fread(lpInputBuffer, 1, nSize, lpInputFile) != nSize) { printf("Echec de la lecture du fichier\n"); goto free_output_memory; } lpInputBuffer[nSize] = 0; nI = 0; nJ = 0; nK = 0; nState = READING_HEADER; lpPreviousHeader[0] = 0; while (lpInputBuffer[nI]) { switch (lpInputBuffer[nI]) { case '[': strcpy(&lpOutputBuffer[nK], LINE_BEGINNING); nK += strlen(LINE_BEGINNING); break; case ']': strcpy(&lpOutputBuffer[nK], LINE_ENDING); nK += strlen(LINE_ENDING); nState = READING_HEADER; break; case '\n': case '\r': case ';': break; case ' ': if (nState == READING_HEADER) { lpCurrentHeader[nJ] = 0; if (strcmp(lpCurrentHeader, lpPreviousHeader)) { sprintf(lpVectorSeparator, "Vector: %s\n", lpCurrentHeader); strcpy(&lpOutputBuffer[nK], lpVectorSeparator); nK += strlen(lpVectorSeparator); strcpy(lpPreviousHeader, lpCurrentHeader); } nState = READING_VALUES; nJ = 0; } else { lpOutputBuffer[nK] = ' '; nK++; } break; default: if (nState == READING_HEADER) { lpCurrentHeader[nJ] = lpInputBuffer[nI]; nJ++; } else { lpOutputBuffer[nK] = lpInputBuffer[nI]; nK++; } } nI++; } /* Lecture du fichier et ajout d'un zéro terminal */ if (fwrite(lpOutputBuffer, 1, nK, lpOutputFile) != nK) { printf("Echec de l'écriture du fichier\n"); goto free_output_memory; } nResult = 0; free_output_memory: free(lpOutputBuffer); free_input_memory: free(lpInputBuffer); close_output_file: fclose(lpOutputFile); close_input_file: fclose(lpInputFile); the_end: return nResult; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionsprintf(lpVectorSeparator, "Vector: %s\n", lpCurrentHeader);
int main() { char lpInputFileName[200]; char lpOutputFileName[200]; char* lpExtension; int nExtensionPos; FILE* lpInputFile; FILE* lpOutputFile; long nSize; char* lpInputBuffer; char* lpOutputBuffer; char lpPreviousHeader[20]; char lpCurrentHeader[20]; char lpVectorSeparator[40]; int nState; int nResult; long nI; long nJ; long nK; nResult = 1; puts("Entrez le nom du fichier à convertir"); scanf("%s", lpInputFileName); /* Génération du nom du fichier de sortie : NomFic_output.ExtFic */ strcpy(lpOutputFileName, lpInputFileName); lpExtension = strrchr(lpOutputFileName, '.'); if (lpExtension) { nExtensionPos = (int)(lpExtension - lpOutputFileName); lpOutputFileName[nExtensionPos] = 0; } strcat(lpOutputFileName, "_output"); if (lpExtension) strcat(lpOutputFileName, &lpInputFileName[nExtensionPos]); /* Ouverture des fichiers */ lpInputFile = fopen(lpInputFileName, "rb"); if (! lpInputFile) { printf("Echec de l'ouverture du fichier %s\n", lpInputFileName); goto the_end; } lpOutputFile = fopen(lpOutputFileName, "w+"); if (! lpOutputFile) { printf("Echec de l'ouverture du fichier %s\n", lpOutputFileName); goto close_input_file; }
lit(buffer, position, fin du fichier - position) écrit(buffer, position + taille, fin du fichier - position) écrit(truc à insérer, position, taille)
#include <stdio.h> #include <stdlib.h> #include <string.h> #define READING_HEADER 0 #define READING_VALUES 1 #define LINE_BEGINNING "V{'ANI'= " #define LINE_ENDING "};\n" char* HexToBin(char nLetter) { switch (nLetter) { case '0': return "0000"; case '1': return "0001"; case '2': return "0010"; case '3': return "0011"; case '4': return "0100"; case '5': return "0101"; case '6': return "0110"; case '7': return "0111"; case '8': return "1000"; case '9': return "1001"; case 'a': return "1010"; case 'b': return "1011"; case 'c': return "1100"; case 'd': return "1101"; case 'e': return "1110"; case 'f': return "1111"; default: return "err "; } } int main() { char lpInputFileName[200]; char lpOutputFileName[200]; char* lpExtension; int nExtensionPos; FILE* lpInputFile; FILE* lpOutputFile; long nSize; char* lpInputBuffer; char* lpOutputBuffer; char lpPreviousHeader[20]; char lpCurrentHeader[20]; char lpVectorSeparator[40]; int nField; int nState; int nResult; long nI; long nJ; long nK; nResult = 1; puts("Entrez le nom du fichier à convertir"); scanf("%s", lpInputFileName); /* Génération du nom du fichier de sortie : NomFic_output.ExtFic */ strcpy(lpOutputFileName, lpInputFileName); lpExtension = strrchr(lpOutputFileName, '.'); if (lpExtension) { nExtensionPos = (int)(lpExtension - lpOutputFileName); lpOutputFileName[nExtensionPos] = 0; } strcat(lpOutputFileName, "_output"); if (lpExtension) strcat(lpOutputFileName, &lpInputFileName[nExtensionPos]); /* Ouverture des fichiers */ lpInputFile = fopen(lpInputFileName, "rb"); if (! lpInputFile) { printf("Echec de l'ouverture du fichier %s\n", lpInputFileName); goto the_end; } lpOutputFile = fopen(lpOutputFileName, "w+"); if (! lpOutputFile) { printf("Echec de l'ouverture du fichier %s\n", lpOutputFileName); goto close_input_file; } /* Récupération de la taille du fichier */ fseek(lpInputFile, 0, SEEK_END); nSize = ftell(lpInputFile); if (! nSize) { printf("Le fichier d'entrée est vide\n"); goto close_output_file; } fseek(lpInputFile, 0, SEEK_SET); /* Allocation d'un tampon pour récupérer le contenu du fichier */ lpInputBuffer = (char*)malloc(nSize + 1); if (! lpInputBuffer) { printf("Echec de l'allocation de l'entrée : %ld octets\n", nSize + 1); goto close_output_file; } /* Allocation d'un tampon pour récupérer le contenu du fichier */ /* Attention : La taille nécessaire est approximé par deux fois la taille de l'entrée */ lpOutputBuffer = (char*)malloc(nSize * 2); if (! lpOutputBuffer) { printf("Echec de l'allocation de la sortie : %ld octets\n", nSize * 2); goto free_input_memory; } /* Lecture du fichier et ajout d'un zéro terminal */ if (fread(lpInputBuffer, 1, nSize, lpInputFile) != nSize) { printf("Echec de la lecture du fichier\n"); goto free_output_memory; } lpInputBuffer[nSize] = 0; nI = 0; nJ = 0; nK = 0; nState = READING_HEADER; lpPreviousHeader[0] = 0; while (lpInputBuffer[nI]) { switch (lpInputBuffer[nI]) { case '[': strcpy(&lpOutputBuffer[nK], LINE_BEGINNING); nK += strlen(LINE_BEGINNING); break; case ']': strcpy(&lpOutputBuffer[nK], LINE_ENDING); nK += strlen(LINE_ENDING); nState = READING_HEADER; break; case ',': lpOutputBuffer[nK] = ','; nK++; nField++; break; case '\n': case '\r': case ';': break; case ' ': if (nState == READING_HEADER) { lpCurrentHeader[nJ] = 0; if (strcmp(lpCurrentHeader, lpPreviousHeader)) { sprintf(lpVectorSeparator, "Vector: %s\n", lpCurrentHeader); strcpy(&lpOutputBuffer[nK], lpVectorSeparator); nK += strlen(lpVectorSeparator); strcpy(lpPreviousHeader, lpCurrentHeader); } nState = READING_VALUES; nField = 1; nJ = 0; } else { lpOutputBuffer[nK] = ' '; nK++; } break; default: if (nState == READING_HEADER) { lpCurrentHeader[nJ] = lpInputBuffer[nI]; nJ++; } else { if ((nField 2) || (nField 7)) { strcpy(&lpOutputBuffer[nK], HexToBin(lpInputBuffer[nI])); nK += 4; } else { lpOutputBuffer[nK] = lpInputBuffer[nI]; nK++; } } } nI++; } /* Lecture du fichier et ajout d'un zéro terminal */ if (fwrite(lpOutputBuffer, 1, nK, lpOutputFile) != nK) { printf("Echec de l'écriture du fichier\n"); goto free_output_memory; } nResult = 0; free_output_memory: free(lpOutputBuffer); free_input_memory: free(lpInputBuffer); close_output_file: fclose(lpOutputFile); close_input_file: fclose(lpInputFile); the_end: return nResult; }