Supprimer une ligne contenu dans un fichier txt

cobra176 Messages postés 86 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 21 janvier 2009 - 31 mai 2006 à 17:59
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 2 juin 2006 à 15:36
bonjour a tous

je recherche un code permettant de retirer une ligne contenu dans un fichier
j'ai vu qu'il existé déja des codes permettant cela mais j'ai esssaye et il ne marche pas
alors je demande de l'aide pour créer cette code

pour information
les informations sont contenu dans un fichier appellé carnet.txt et je veux supprimer la ligne entier

merci de votre aide

6 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
31 mai 2006 à 20:39
Yop,


Tu lit séquencielement ton fichier et tu range les phrase dans un
buffer (soite liste chainée si tu veu pas perdre de la mémoire, ou
simplement une chaine de caractère assez grande) et on fois que tu a
trouvé la phrase a retiré, tu passe et tu continue d'écrire dans le
buffer. A la fin de la lecture, tu replace tout les contenu du buffer
dans ton fichier (mode 'w' pour re crée un fichier du même nom) ou dans
un autre et le tour est joué.


Les fonctions :


FILE * = fopen("carnet.txt","r") remplacer le "r" par "w" a la ré écriture.

Pour lire , ben tu a le choix. mais vu que tu doit lire séquencielement je te conseil fgets().

Pour ecrire, ben la aussi tu a le choix , si tout ton text ce trouve
dans une chaine de caractère utilise plutot fwrite() (change alors le
"w" en "w+") et si c'est dans une chaine de caractère fputs dans une
boucle for fera l'affaire.


Voila


PS : tu apprendra mieu en le codant toi même ;)
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
31 mai 2006 à 20:39
pas oublié fclose() a la fin de la lecture et de l'écriture.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
31 mai 2006 à 21:52
Pourquoi lire par passes si tu mettras tout dans un buffer ??? en ce cas lis tout en 1 passe, ensuite avance un pointeur en comptant les '\n', à la finale on ecrit en 2 passes.

ciao...
BruNews, MVP VC++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
1 juin 2006 à 19:50
j'ai tous suivi apart le "on écrit en 2 passe". tu divise le buffer en deux?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juin 2006 à 20:56
mais non voyons.

2 pointeurs, 1(p1) est positionné sur debut ligne à virer et l'autre (p2) a fini sur debut du second bloc du buffer à conserver.

donc:
DWORD d;
SetFilePointer(hfl, 0, 0, FILE_BEGIN);
WriteFile(hfl,  buff, p1 - buff, &d, 0);
WriteFile(hfl, p2, buff + sizefl - p2, &d, 0);
SetEndOfFile(hfl);
CloseHandle(hfl);

ciao...
BruNews, MVP VC++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
2 juin 2006 à 15:36
M**** c'est con. C'est super ça. Pas bête dutout. Je vai vite appliquer ça :p pour bien maitriser le bazar lol.
0
Rejoignez-nous