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 C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
Partager