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

Messages postés
23
Date d'inscription
mardi 30 mars 2004
Dernière intervention
4 mars 2008
- 24 juin 2006 à 18:13 - Dernière réponse :
Messages postés
23
Date d'inscription
mardi 30 mars 2004
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 ??
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
23
Date d'inscription
mardi 30 mars 2004
Dernière intervention
4 mars 2008
- 25 juin 2006 à 00:33
3
Merci
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 !!!!!!!!!!!!!!!!!!!!!!!!!

Merci bobybx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de bobybx
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 24 juin 2006 à 18:39
0
Merci
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.
Commenter la réponse de luhtor
Messages postés
23
Date d'inscription
mardi 30 mars 2004
Dernière intervention
4 mars 2008
- 24 juin 2006 à 18:46
0
Merci
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.
Commenter la réponse de bobybx
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 24 juin 2006 à 19:10
0
Merci
Ben:

ofstream file;

file.seekp(debut de ligne 2);

file << ligne 4.

      
Commenter la réponse de luhtor
Messages postés
23
Date d'inscription
mardi 30 mars 2004
Dernière intervention
4 mars 2008
- 24 juin 2006 à 19:14
0
Merci
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?
Commenter la réponse de bobybx
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 24 juin 2006 à 19:23
0
Merci
Bon sinon:

int position = 164;

ofstream fichier( "cpm.txt" );

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

fichier.seekp(position);

fichier.write(chaine, longueur de chaine);
Commenter la réponse de luhtor
Messages postés
23
Date d'inscription
mardi 30 mars 2004
Dernière intervention
4 mars 2008
- 24 juin 2006 à 19:27
0
Merci
encore 164 blanc

Là, je suis perdu...
Commenter la réponse de bobybx
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 24 juin 2006 à 19:38
0
Merci
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";
Commenter la réponse de luhtor

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.