Modifier un fichier ligne à ligne
Bonjour,
Je souhaite modifier un fichier (de type texte) ligne à ligne (lignes de longueur fixe 450) selon des critères biens défini, à savoir : si les caractères 4 et 5 sont différents de '00' et les caractères 449 et 450 sont différents de 'C9' alors remplacer les caractères 41 à 47 par des espaces.
Voici ce que j'ai fait :
Remarque : 'liste' contient la liste des fichiers d'un dossier donné
Code:
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
| FILE *fichier;
char ligne_lu[512];
char local_file[512];
char *ptb, z = 'get';
for(int n=0; n<liste->Count; n++)
{
strcpy(local_file, liste->Strings[n].c_str());
ptb = strchr(local_file, z);
if(!ptb) { // on ne traite pas les fichiers "budget****" (renommés en local "get****")
TStringList *contenu = new TStringList;
fichier = fopen(local_file, "w+");
if(fichier == NULL)
{
StatusBar1->SimpleText = "Impossible d'ouvrir le fichier "+AnsiString(local_file);
exit(1);
}
fseek(fichier, 0, 0);
while(fgets(ligne_lu, 512, fichier) != NULL) {
if((ligne_lu[449] == 'C') && (ligne_lu[450] != '9')) {
if((ligne_lu[4] != '0') || (ligne_lu[5] != '0')) {
contenu->Add(AnsiString(ligne_lu).SubString(0, 40)+" "+AnsiString(ligne_lu).SubString(48, 450));
}
else {
contenu->Add(ligne_lu);
}
}
else {
contenu->Add(ligne_lu);
}
}
fclose(fichier);
contenu->SaveToFile(local_file);
contenu->Clear();
}
} |
'contenu' me sert de buffer pour stocker le contenu modifié ou non de chaque ligne, puis j'écris mon fichier à la fin. Enfin ça c'est en théorie, en pratique soit mon fichier reste inchangé soit mon fichier est vide.
Comment faire ?
Peut-être y'a t'il une autre méthode ?