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

Langage C++ Discussion :

Modification d'une ligne dans un fichier txt et remplir un objet


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 34
    Points
    34
    Par défaut Modification d'une ligne dans un fichier txt et remplir un objet
    Bonsoir a tous,
    j'ai écrit cette classe qui rempli un fichier txt par des objets de type matiere
    matiere.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include<iostream>
    #include<string>
    #include <fstream>
     
    using namespace std;
    class matiere
    {
    	string m_nom;
    	int m_cof;
    public:
    	matiere():m_nom(" "),m_cof(0){} ;
    	matiere(string nom,int cof):m_nom(nom),m_cof(cof){};
    	friend istream &operator>>(istream &,matiere &);
    	friend ostream &operator<<(ostream &,matiere);
    	void ecrire();
    	bool rechercher();
    	void affiche();
    	void ajouter(matiere );
    };
    matiere.ccp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    #include "matiere.h"
    istream &operator>>(istream &in,matiere &mat)
    {
     
    	in>>mat.m_nom;
        cout<<"\t";
    	in>>mat.m_cof;
    	return in;
    }
    ostream &operator<<(ostream &out, matiere mat)
    {
    	out<<endl;
    	out<<mat.m_nom;
    	out<<"\t";
    	out<<mat.m_cof<<endl;
    	return out;
    }
     
    void matiere::ecrire()
    {
    	ofstream fichier("../matier.txt",ios::app|fstream::out);
    		fichier<<*this;
    	fichier.close();
    }
     
    void matiere::affiche()
    {
    	matiere mat;
    	ifstream fichier("../matier.txt",fstream::in);
    	string ligne ="";
    	while(!fichier.eof())
    	{ 
    		getline(fichier,ligne);
    		cout<<ligne;
    		cout<<endl;
    	}
    	fichier.close();
    }
    bool matiere::rechercher()
    {
    	matiere mats;
    	bool existe = false;
    	ifstream fichier("../matier.txt",ios::app);
    	string ligne;
    	while(getline( fichier, ligne))
    	{
    		fichier>>mats;
    		if(m_nom==mats.m_nom)
    			existe=true;
    	}
    	return existe;
    }
     
    void ajouter(matiere mat)
    {
    	if(!mat.rechercher())
    	{
    		ofstream fichier("../matier.txt",ios_base::app|ios::out);
    	    fichier<<mat;
    	    fichier.close();
    	}
    	else
    		cout<<"existe";
    }
    Je suis maintenant bloquer sur une fonction qui me permet de changer le contenu d'une ligne du fichier matiere.txt
    exemple
    La 2eme ligne contient
    fr 12
    je veux le changer en
    ang 15
    Une autre fonction que je veux la réaliser. Une fonction qui rempli un objet matiere à partir du fichier matiere.txt. On prend un exemple:
    j'ai un objet mats
    je veux le remplir par la 4eme ligne du fichier matiere qui contient ces informations
    math 30


    S.V.P aider moi pour réaliser cette fonction
    merci.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Tu ne peux pas modifier un fichier texte comme ça, il faut en règle générale le lire intégralement, le modifier, puis le sauvegarder... La raison en est simple : il est rarissime de remplacer une ligne par une autre ligne faisant très exactement la même taille que la précédente !!

    Or, les opérations d'insertion dans un fichier n'existent pas nativement. Pour ton opération, tu pourrais éventuellement chercher la ligne en mode binaire, pour la modifier, mais il faudrait que tu puisses prévoir suffisamment de marge en fin de ligne (espaces, par exemple) de façon à être certain de TOUJOURS avoir la place d'écrire la nouvelle valeur.
    En plus, ceci ne te permettrait pas de rajouter ou supprimer des lignes, sauf en fin de fichier bien entendu.

    Cela est toutefois excessivement complexe pour ton besoin, je pense : La lecture intégrale du fichier, puis modification, puis sauvegarde me semble bien plus simple, même si c'est moins rapide à l'exécution...


    Si tu es sous Windows et que ce n'est pas un exercice imposé, à ta place, je me tournerais directement vers les fichiers .INI pour réaliser cette opération, mais bon...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    J'ai pu réalisé ce code pour résoudre le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    void matiere::changer(matiere mte)
    {
    	ifstream fichier("../matier.txt",fstream::in);
    	ofstream fichier2("../matier_tmp.txt",fstream::out);
        matiere m,ms,mss;
        while(!fichier.eof())
    	{
    		 fichier>>m;
    		 if(m.m_nom==(*this).m_nom)
    			 fichier2<<mte;
    		 else 
    			 fichier2<<m;
    	}
       fichier.close();
       fichier2.close();
       remove("../matier.txt");
       rename("../matier_tmp.txt","../matier.txt"); 
    }
    Reste un problème toujours la dernière ligne s'écrit 2 fois dans le fichier.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    Bonjour à tous,
    Tout d'abord, je vous dis merci à tous pour vos aide et pour vos conseilles.
    Ensuite, j'ai réussi à résoudre mon problème avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    void matiere::changer(matiere mte)
    {
    	ifstream fichier("../matier.txt",fstream::in);
    	ofstream fichier2("../matier_tmp.txt",fstream::out);
        matiere m,ms,mss;
        while(!fichier.eof())
    	{
    		 fichier>>m;
    		 if((m.m_nom==(*this).m_nom)&&(mte.m_nom!=ms.m_nom))//j'ai ajouté cette condition &&(mte.m_nom!=ms.m_nom) pour que mte ne soit pas écrit 2 fois 
    		 {
    			 fichier2<<mte;
    			 ms=mte;
    		 }
    		 else if((m.m_nom!=mss.m_nom)&&(m.m_nom!=(*this).m_nom))//cette condition pour que l'objet écrit ne soit pas réécrit dans fichier2 et l'objet qui a été change ne soit pas écrit aussi dans fichier2 si elle se situe en dernière ligne   
    		 {
    			 fichier2<<m;
    			 mss=m;
    		 }
    	}
       fichier.close();
       fichier2.close();
       remove("../matier.txt");
       rename("../matier_tmp.txt","../matier.txt"); 
    }

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

Discussions similaires

  1. récupéré une ligne dans un fichier txt pour mettre dans msgbox
    Par fabrice44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/02/2008, 14h01
  2. Supprimer une ligne dans un fichier .txt
    Par lince102 dans le forum MATLAB
    Réponses: 12
    Dernier message: 31/01/2008, 10h19
  3. Modifier une ligne dans un fichier txt en java
    Par nihad510 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 09/10/2007, 22h08
  4. Suppression d'une ligne dans un fichier txt
    Par EvaristeGaloisBis dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/07/2007, 17h58
  5. suprimmer une ligne dans un fichier .txt
    Par Totuch dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/06/2007, 11h28

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