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 ?