Modifier un fichier

Résolu
XorCo Messages postés 11 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 22 septembre 2004 - 18 sept. 2004 à 20:28
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 18 sept. 2004 à 23:37
Voilà le but est que je puisse modifier un fichier .. donc le lire et dès que j'arrive à un char spécifique je dois écrire qqchose.

Je suppose que je dois faire ça plus ou moin comme ça ... mais ça ne marche pas...

flot = fopen("fichier.txt","r+");

while ( c= fgetc(flot),c!=EOF ) {
if ( c == 'F' ) { // Des que char arrive à la lettre F
fputs(modif,flot); // J'écrit
fflush(flot); // Je fais le transfer
fclose(flot); // Je ferme le fichier
}
}

Prq cela ne marche-t-il pas ?

Merci !

15 réponses

Pspice Messages postés 12 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 2 décembre 2004
18 sept. 2004 à 20:42
Slt, je suis pas trop sur, mais je crois pas que tu puisse insere des carcateres, je te conseille plutot d'ouvrir ton fichier, et d'en faire une copie jusqua la lettre F ensuite tu rajoute ce ke tu veux ecrire et tu reprends la copie si besoin est.
Pspice Messages postés 12 Date d'inscription dimanche 3 août 2003 Statut Membre Dernière intervention 2 décembre 2004
18 sept. 2004 à 20:48
excuse je me suis peut-etre mal expliqué, je voulais dire que tu crée un autre fichier et que tu copie le contenu de ton fichier initial ds le nveau jusqua la lettre F...
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 20:57
retiens la pos et fais un rewind/fseek avant d'ecrire

fflush inutile avant fclose

pour etre plue efficace travail sur un buffer

while ( (c = fgetc(flot) )!= EOF )

fputc et pas fputs
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 sept. 2004 à 20:59
while ( c= fgetc(flot),c!=EOF )
-> ca marche, mais je trouve pas ca très élégant: que vaut cette expression?

En fait tu n'a pas dit si tu veux insérer (dans ce cas il faut en effet créer un nouveau fichier), ou bien écraser (dans ce cas c'est bon, mais sort de la boucle quand tu trouves 'F').

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 sept. 2004 à 21:02
djl> modif est sans doute un char*...
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 21:05
a oui c'est vrai
XorCo Messages postés 11 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 22 septembre 2004
18 sept. 2004 à 22:48
Hmm ... y a pas moyen d'être un peu plus concrêt ? j'comprend pas trop ce que je dois faire, fonction ?

A quoi sert le 'r+' alors si on ne peut pas l'utiliser comment moi j'ai fait ?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 sept. 2004 à 22:51
Explique exactement ce que tu veux faire, donne un exemple concret.
Tu veux insérer du texte?
XorCo Messages postés 11 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 22 septembre 2004
18 sept. 2004 à 22:54
Ben enfête c'est pas très compliquer ... Imagine toi un fichier txt avec plein de nom différent par example..

Jean;Paul;Frederic;

Mais dans une autre fonction je voudrai par example ajouter leur âge...
Jean 18; Paul 21; Frederic 24;

Il doit bien y avoir une fonction pour faire ce genre de chose non ?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 sept. 2004 à 23:01
Comme Pspice te l'a dit au début, tu vas devoir créer un nouveau fichier (t'iamgine le bordel si on pouvait insérer des caractères comme ca n'importe ou??). Tu copie ce qui t'arrange (les noms) et après chaque nom tu écris l'age.
XorCo Messages postés 11 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 22 septembre 2004
18 sept. 2004 à 23:05
Bon oki ... je vais tenter ça,
Cela dit mon truc était quand-même bien imaginer .. et je ne vois pas du tout prq ce serrait le bordel. Au contraire ... ce serrait bien plus facile. Tu lis chaque char avec un while et dès que t'arrive à une place spécifique tu peux mettre ce que tu veux.
Enfin bon .. ça n'existe pas, tant pis.
En tout cas merci à tous !
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 sept. 2004 à 23:15
Ca serait le bordel sur le disque dur: des que un insères un caractère, il faut décaler tous les suivants, ce serait bien plus long que de créer un nouveau fichier
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 23:19
XorCo > lit le fichier dans un buffer en faisant les modif, fais un rewind et ecris le buffer, pas de surprise si le fichier est plus gros
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 sept. 2004 à 23:24
Enfin s'il est très gros ca devient problematique de tout mettre dans un buffer. Et comme on agrandit le buffer, on doit lire en une passe.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 sept. 2004 à 23:37
ba ca c'est a XorCo de voir en fonction de la taille des fichier, mais tant que ca fais pas plusieurs 100aines de mega apriori pas de pb

ouverture lecture/ecriture, lire contenu dans buffer, maj du fichier
Rejoignez-nous