Modifier la ligne N

Résolu
Rhazou
Messages postés
31
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2009
- 7 mars 2006 à 18:56
Rhazou
Messages postés
31
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2009
- 9 mars 2006 à 16:52
bonjour,
J'ai un petit probleme concernant les flux entré/sortie.
j'aimerais replacer un ligne par une autre dasn un fichier.
je cherche depusi un moment masi sans resultat
seekg permet de se position a un octet défini et non pas a une ligne.
j'utilise ofstream masi peut etre aurai-je besoin de strstream
j'au aussi essayer de l'utiliser comme un ifstream ligne par ligne mais sans succes avec ce code :

std::ofstream fichier( f );
if(fichier) {
std::string ligne;
while(std::getline(fichier, ligne)) {
if(parseur(ligne.c_str(), ':', 1) == find) {
ligne << r;
}
}
}


Merci de votre aide, Rhazou

2 réponses

nwe
Messages postés
18
Date d'inscription
mardi 31 janvier 2006
Statut
Membre
Dernière intervention
19 novembre 2006

9 mars 2006 à 07:49
Il te suffit d' initialiser un compteur de ligne à 0 et de lire ton fichier caractère par caractère puis tu mets ces caractères dans un fichier temporaire de même
type que ton fichier source tout en incrémentant le compteur à chaque fois que tu rencontre un \n jusqu à ce que tu ais atteind la fin tu fichier ou le compteur soit égal à N-1
si c'est le cas tu ignores( ne les mets pas dans le fichier temporaire) tout ce que tu lis jusqu' au prochain \n ou eof

Puis tu mets le texte par lequel tu veux remplacer ta N ième ligne dans le fichier temporaire.

Ensuite tu mets les caractères restant( ie à partir de l' événtuelle N+1 ième ligne jusqu' a la fin du fichier)dans le fichier temporaire

tu renomme le fichier temporaire en ton fichier d' orgine et tu supprime le fichier tempo.
a+
3
Rhazou
Messages postés
31
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
21 juillet 2009

9 mars 2006 à 16:52
Merci beaucoup,

j'ai deja pensé a ce genre de solution mais je voulais eviter de tout parcourir (par soucil d'optimisation).

Mais je ne pense pas qu'il y est plus rapide donc merci ca m'aide a me decider a faire comme ca :)



A+
0