Ofstream et écriture dans un fichier texte [Résolu]

Signaler
Messages postés
18
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008
-
Messages postés
18
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008
-
Bonjour,

J'ai une question peut-être bête mais je suis bloqué :
J'ai un fichier texte avec 3 lignes

ligne 1
ligne 2
ligne 3

Le contenu de ces lignes varient et sont totalement différents.
Je souhaiterais effacer via ofstream la ligne 2 pour la remplacer par une ligne 4 d'une longueur différente.
Je connais la position de la ligne et place le curseur sur la ligne grace à
fichier.seekg(position);

Comment effecer la ligne à cette position en la remplaçant par une autre sans toucher les autres lignes ??

8 réponses

Messages postés
18
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008

Merci pour ton aide luhtor.
J'ai fianlement réussi

Code :

int position = 164;
ofstream fichier( "fichier.txt", ios_base::in );
fichier.seekp(position); fichier << "Groupe B";

Cela me permet de modifier la ligne à la position 164 par "Groupe B" sans aucun impact sur les lignes précédentes et lignes suivantes.

Merci !!!!!!!!!!!!!!!!!!!!!!!!!
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
A ton avis ? Un fichier c'est quoi ? Une suite d'octet. Une ligne c'est
quoi ? une suite d'octet... Apres la ligne 2, la ligne 3 commence. Or
sur un disque dur, tu peux pas rajouter des octets libres entre 2
octets, ca te parait logique non ?

Donc a partir de la, ya pas 36 solutions pour faire ce que tu veux....
Faut tout décaler. Tu écris ta ligne 4 puis toutes les lignes suivantes
a partir de la 3.
Messages postés
18
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008

En effet, logique...

C'est la raison pour laquelle j'ai mis toutes mes lignes de la même taille

explication:

ligne 1 en position 0
ligne 2 en position 12
ligne 3 en position 31

je souhaite modifier la ligne 2 par une ligne 4 de même taille (ligne 4 que je connais)

Comment faire?

Merci d'avance.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ben:

ofstream file;

file.seekp(debut de ligne 2);

file << ligne 4.

      
Messages postés
18
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008

J'ai déjà essayé.

int position = 164;
ofstream fichier( "cpm.txt" );
fichier.seekp(position);
fichier << "Groupe Z\n";

Le code suivant me donne 164 blanc au lieu de ma laisser mes lignes avant la position 164 et efface aussi tout le reste après mon "Groupe Z\n".
En clair la ligne 1 et 3 ont été effacées.

Comment faire pour que ça ne soit pas le cas?
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Bon sinon:

int position = 164;

ofstream fichier( "cpm.txt" );

const char chaine[] = "Groupe Z\n";

fichier.seekp(position);

fichier.write(chaine, longueur de chaine);
Messages postés
18
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
4 mars 2008

encore 164 blanc

Là, je suis perdu...
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
En fait, faut utiliser fstream et non ofstream;


int position = 164;

fstream fichier( "cpm.txt" ); <= note la différence

fichier.seekp(position);

fichier << "Groupe Z\n";