IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Ecriture, ofstream, remplacement de lignes


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bobybx
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2005
    Messages : 122
    Par défaut Ecriture, ofstream, remplacement de lignes
    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 2 et place le curseur sur celle-ci grace à
    fichier.seekg(position);

    Comment effacer la ligne à cette position (ligne 2) en la remplaçant par une autre (ligne 4) sans toucher les autres lignes ??

    Merci d'avance.
    Have Fun

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Quand on écrit dans un fichier ouvert en lecture/écriture, les carctère écrits remplacent automatiquement les précédents... tu as donc 2 choix :

    ta nouvelle ligne fait exactement le même nombre de caractère que la ligne 2 : tu peux réécrire directement sans problèmes...

    les deux lignes ont une longueur différente : il te faut charger tout le fichier, puis le réécrire en l'écrasant...

    parce que :
    si ta ligne est plus courte, que tu réécrit ta ligne par dessus puis que tu décales le reste, les derniers caractères de la dernière ligne du fichier seront en doubles puisqu'ils n'auront pas été réécrits

    si ta ligne est plus longue, il te faudra de toute façons charger la fin du fichier avant de réécrire...


    En conclusion, je pense que le choix le plus pratique et de charger tout ton fichier dans un string ou un vector<string> (par exemple) puis de tout réécrire ensuite...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé Avatar de Bobybx
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2005
    Messages : 122
    Par défaut
    En effet,

    j'ai réfléchi quelques temps après mon message que le fait que la ligne est une longueur différente me pose quelques soucis. j'ai trouvé un moyen pour que toutes les lignes à modifier ait la même longueur

    Je connais donc la position d'une ligne que je souhaite remplacer par une autre ligne de même taille, m'évitant ainsi de toucher aux autres.

    Comment faire ceci, (si c'est possible)

    Merci pour votre aide

  4. #4
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par Swoög
    Quand on écrit dans un fichier ouvert en lecture/écriture, les carctère écrits remplacent automatiquement les précédents... tu as donc 2 choix :

    ta nouvelle ligne fait exactement le même nombre de caractère que la ligne 2 : tu peux réécrire directement sans problèmes...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre confirmé Avatar de Bobybx
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2005
    Messages : 122
    Par défaut
    Citation Envoyé par Swoög
    Quand on écrit dans un fichier ouvert en lecture/écriture, les carctère écrits remplacent automatiquement les précédents... tu as donc 2 choix :

    ta nouvelle ligne fait exactement le même nombre de caractère que la ligne 2 : tu peux réécrire directement sans problèmes...
    je vais tester ça

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu recopies tout dans un buffer temporaire en faisant ton remplacement lorsque tu arrives sur la ligne 2, puis tu écrases complétement l'ancien contenu du fichier avec ce buffer.

  7. #7
    Membre confirmé Avatar de Bobybx
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2005
    Messages : 122
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu recopies tout dans un buffer temporaire en faisant ton remplacement lorsque tu arrives sur la ligne 2, puis tu écrases complétement l'ancien contenu du fichier avec ce buffer.

    Cela m'amènerait à modifier ma ligne 3 écrite après la ligne 2, ce qui ne va pas.

    Je souhaite juste modifier la ligne 2 par une ligne de même taille exactement!

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Cela m'amènerait à modifier ma ligne 3 écrite après la ligne 2, ce qui ne va pas
    Pas compris ce que tu voulais dire.

    Je souhaite juste modifier la ligne 2 par une ligne de même taille exactement!
    Dans ton premier post tu dis le contraire.

    Je souhaiterais effacer via ofstream la ligne 2 pour la remplacer par une ligne 4 d'une longueur différente.

  9. #9
    Membre confirmé Avatar de Bobybx
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2005
    Messages : 122
    Par défaut
    Citation Envoyé par Laurent Gomila
    Pas compris ce que tu voulais dire.
    Dans ton premier post tu dis le contraire.
    J'ai rectifié mon 1er post, la ligne prenant la place de celle à modifier ont exactement la même taille maintenant.

  10. #10
    Membre confirmé Avatar de Bobybx
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2005
    Messages : 122
    Par défaut
    euh... une question :

    Comment on utilise ofstream pour modifier "fichier.txt" à la position 64 par exemple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int position = 64;
    ofstream fichier( "fichier.txt" );
    fichier.seekg(position);
    fichier << "Une ligne\n";
    seekg ne fonctionne pas avec ofstream

    (je suis pas très bon, cela se voit non? )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecriture fichier remplacement ligne
    Par iperkut dans le forum Langage
    Réponses: 6
    Dernier message: 19/05/2010, 10h13
  2. Remplacer une ligne d'un fichier texte
    Par mullinski dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/07/2006, 18h53
  3. Ecriture en fin de ligne
    Par kamshaa dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 13h43
  4. Réponses: 9
    Dernier message: 22/05/2006, 12h21
  5. Remplacer une ligne dans une fichier
    Par norior dans le forum Langage
    Réponses: 1
    Dernier message: 18/01/2006, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo