Ofstream et écriture dans un fichier texte

Résolu
bobybx Messages postés 18 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 4 mars 2008 - 24 juin 2006 à 18:13
bobybx Messages postés 18 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 4 mars 2008 - 25 juin 2006 à 00:33
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 ??
A voir également:

8 réponses

bobybx Messages postés 18 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 4 mars 2008
25 juin 2006 à 00:33
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 !!!!!!!!!!!!!!!!!!!!!!!!!
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2006 à 18:39
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.
0
bobybx Messages postés 18 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 4 mars 2008
24 juin 2006 à 18:46
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.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2006 à 19:10
Ben:

ofstream file;

file.seekp(debut de ligne 2);

file << ligne 4.

      
0

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

Posez votre question
bobybx Messages postés 18 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 4 mars 2008
24 juin 2006 à 19:14
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?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2006 à 19:23
Bon sinon:

int position = 164;

ofstream fichier( "cpm.txt" );

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

fichier.seekp(position);

fichier.write(chaine, longueur de chaine);
0
bobybx Messages postés 18 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 4 mars 2008
24 juin 2006 à 19:27
encore 164 blanc

Là, je suis perdu...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 juin 2006 à 19:38
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";
0
Rejoignez-nous