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

 C++ Discussion :

ecrire et lire un fichier txt


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut ecrire et lire un fichier txt
    Bonjour a tous,
    Mon problème consiste à réaliser une fonction dans une classe matiere me permettant d'enregistrer les informations saisies au clavier dans un fichier texte avec vérification si ces informations ont été écrit déjà.
    J'ai parcouru beaucoup de toto mais j'ai pas trouver un exemple qui me permet de comprendre comment implémenter ces fonctions.
    S.V.P, si quelqu'un peut m'indiquer un toto ou un exemple descriptif.
    Remarque:
    j'ai cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include<iostrem>
    #include<string>
    #include<fstream>
    class matiere
    {
     private:
     string mat;
     int cof;
     public:
     ajouter();/*comment écrire cette fonction pour que les informations saisi seront enregistrer dans un fichier c.a.d la chaine mat et l'entier cof seront enregistrer dans le fichier*/
     afficher();/* lire et afficher a partir du fichier */
    };

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 163
    Billets dans le blog
    153
    Par défaut
    Bonjour,

    Je n'ai pas compris votre problème,
    Vous ne savez pas comment écrire dans un fichier?
    Ou vous ne savez pas comment faire des classes? ( vu qu'a première vu votre classe n'est pas "parfaite" ; ( il manque les qualificateurs "private:" "public:" )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Je n'ai pas compris votre problème,
    Vous ne savez pas comment écrire dans un fichier?
    Ou vous ne savez pas comment faire des classes? ( vu qu'a première vu votre classe n'est pas "parfaite" ; ( il manque les qualificateurs "private:" "public:" )
    Je ne save pas comment écrire et lire dans un fichier
    pour le qualificateur "private" c'est pas obligatoire et j'ai écris "public" si vous regardez bien dans le code.

  4. #4
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Des cours sur l'écriture/lecture de fichier en C++ il doit y en avoir un paquet en ligne. Un parmi d'autre.

    En ce qui concerne ton cas particulier, si jamais tu veux sauvegarder plusieurs matières il suffira de préciser à l'ouverture du fichier en écriture que tu veux écrire à la fin du fichier et non pas écraser le fichier. Tu pourras ensuite ajouter tes deux variables directement comme dans un "cout", je pense qu'il est plus sûr de te fixer également des caractères spéciaux pour séparer tes valeurs, le plus simple étant le saut de ligne '\n' (ou endl).

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    Citation Envoyé par YoniBlond Voir le message
    Des cours sur l'écriture/lecture de fichier en C++ il doit y en avoir un paquet en ligne. Un parmi d'autre.

    En ce qui concerne ton cas particulier, si jamais tu veux sauvegarder plusieurs matières il suffira de préciser à l'ouverture du fichier en écriture que tu veux écrire à la fin du fichier et non pas écraser le fichier. Tu pourras ensuite ajouter tes deux variables directement quand dans un "cout", je pense qu'il est plus sûr de te fixer également des caractères spéciaux pour séparer tes valeurs, le plus simple étant le saut de ligne '\n' (ou endl).
    merci pour le lien. Je vais le voir.S'il y a des exemples ça sera bien
    merci encore.

  6. #6
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561

  7. #7
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    Merci à tous de vos réponse mais le problème est que comment écrire un type de classe matière dans un fichier parce que tout les exemples parle de type de base et non pas d'un type défini par utilisateur et un autre question: est ce que les fonctions d'écriture et de lecture doit être défini comment fonctions membre de la classe ou comment fonction amie ou autre
    merci d'avance

  8. #8
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Si tu souhaites pouvoir envoyer directement un objet à toi dans un flux (fichier ou sortie d'écran), tu dois surcharger l'opérateur d'injection de flux '<<' là aussi tu trouveras sûrement de nombreux exemples sur le net.
    Le but étant ensuite de balancer directement ton objet dans un flux tout comme un type de base. Pour cela ta fonction surchargeant l'opérateur devra expliciter quelles variables envoyer dans le flux, dans quel ordre etc.

  9. #9
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    le problème est comment écrire le syntaxe car tout les exemples par de types de bases

  10. #10
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    http://cpp.developpez.com/faq/cpp/?page=surcharge

    Je ne suis pas sûr de bien comprendre ta question, au final tu devras forcément passer par des types de base. Une classe perso n'est qu'un ensemble de variable de types de base, donc à toi de les envoyer un par un dans le flux dans ta fonction.

    Il faut savoir que l'opérateur d'injection appartient à la classe ostream, tu dois donc déclarer ta fonction à l'extérieur de ta classe. En général on déclare aussi cette fonction amie avec la classe pour disposer plus facilement des données membres.

    Un exemple (de tête, pas sûr de la syntaxe)
    Dans ton .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    include <iostream>
     
    class TaClasse
    {
    private:
        int _attribut1;
        string _attribut2;
     
    public:
        friend ostream& operator<<(ostream& leFlux, const TaClasse& tonObjet);
    };
     
    ostream& operator<<(ostream& leFlux, const TaClasse& tonObjet);
    Dans ton .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ostream& operator<<(ostream& leFlux, const TaClasse& tonObjet)
    {
        leFlux << tonObjet._attribut1 << "\t" << tonObjet._attribut2 << "\n";
        return leFlux;
    }

  11. #11
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    merci a tous pour vos aides
    j'ai parvenu a ecrire et a lire a partir d'un fichier est voici le .h de la classe matiere
    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
     
    #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 ajoute();
    	bool rechercher();
    	void affiche();
    };
    le ccp de la classe matiere
    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
     
    #include "matiere.h"
    istream &operator>>(istream &in,matiere &mat)
    {
    	in>>mat.m_nom;
        cout<<endl;
    	in>>mat.m_cof;
    	return in;
    }
    ostream &operator<<(ostream &out, matiere mat)
    {
    	out<<mat.m_nom;
    	out<<"\t\t\t";
    	out<<mat.m_cof;
    	out<<endl;
    	return out;
    }
     
    void matiere::ajoute()
    {
    	ofstream fichier("C:\\Documents and Settings\\hamza jaafar\\Mes documents\\Visual Studio 2008\\Projects\\Project1\\mini_projet_C++\\mini_projet_C++\\matier.txt",ios_base::app);
    	fichier<<*this;
    	fichier.close();
     
    }
    void matiere::affiche()
    {
    	matiere mat;
    	ifstream fichier("C:\\Documents and Settings\\hamza jaafar\\Mes documents\\Visual Studio 2008\\Projects\\Project1\\mini_projet_C++\\mini_projet_C++\\matier.txt");
    	string ligne;
    	while(getline( fichier, ligne))
    	{
    		fichier>>mat;
    		cout<<mat;
    	}
    }
    bool matiere::rechercher()
    {
    	matiere mats;
    	bool existe = false;
    	ifstream fichier("C:\\Documents and Settings\\hamza jaafar\\Mes documents\\Visual Studio 2008\\Projects\\Project1\\mini_projet_C++\\mini_projet_C++\\matier.txt");
    	string ligne;
    	while(getline( fichier, ligne))
    	{
    		fichier>>mats;
    		if(m_nom==mats.m_nom)
    			existe=true;
    	}
    	return existe;
    }
    et voici une fonction main pour tester les différents fonctions de la classe matiere
    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 "matiere.h"
    void main()
    {
    	for(int i=0;i<2;i++)
    	{
    		matiere mat;
    		cout<<"donner matier"<<endl;
    		cin>>mat;
    		mat.ajoute();
    	}
    	matiere mat;
    	mat.affiche();
     
    	matiere mats("francais",0);
    	if(mats.rechercher())
    		cout<<"matiere existe"<<endl;
    	else 
    		cout<<"not existe"<<endl;
    }
    Il reste juste un problème la fonction affiche() n'affiche pas le premier ligne de la fichier matiere.
    Enfin, j'attends vos critiques et vos suggestions pour améliorer le code de cette classe et merci a vous tous infiniment.

  12. #12
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    2 petites remarques / suggestions / bonnes habitudes (on peut toujours améliorer un code )
    • Pas de using namespace dans un .h
      utilises plutôt le préfixage std::
      C'est certes plus fastidieux mais ça évite d'inclure tout le namespace dans les autres fichiers où il n'est pas nécessaire. cf FAQ
    • Privilégies le passage des paramètres par références constantes plutôt que par valeur quand c'est possible comme ici:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      	matiere(const std::string &nom,const int &cof):m_nom(nom),m_cof(cof){};
      NB : pour le int ça n'apporte pas grand chose mais pour les paramètres autre que lse type de bases, tu éviteras un copie inutile de l'objet.
      Idem pour tes opérateur << et >> le passage par référence constante est à préférer (pour la class matiere)
    • Utilises les modificateurs const quand tes méthodes ne modifient pas les données de ta classe:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
       
      bool rechercher() const;
      void affiche() const;
      explications dans la FAQ
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ifstream fichier("C:\\Documents and Settings\\hamza jaafar\\Mes documents\\Visual Studio 2008\\Projects\\Project1\\mini_projet_C++\\mini_projet_C++\\matier.txt");
      Pas de chemin en dur mais des chemins relatif (au pire) : "../matiere.txt"

    J'ai pas regardé pour le problème dans afficher

  13. #13
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    Merci befalimpertinent pour tout tes conseilles.
    Je reste en attend pour résoudre le problème d'affichage et d'autres conseilles

  14. #14
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Par défaut
    bonsoir a tous,
    Merci pour tout vos aides j'ai pu résoudre le problème de la fonction affiche() et voici le 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
     
    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();
    }
    problème résolu et merci une autre fois pour tant personne ma répondu.

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

Discussions similaires

  1. Ecrire et lire un fichier txt simultanément
    Par sir_nebuchadnezzar dans le forum Général Python
    Réponses: 9
    Dernier message: 02/02/2012, 20h53
  2. ecrire et lire un fichier .txt
    Par sky88 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/04/2008, 16h28
  3. [CSV] Ecrire et Lire un fichier Excel depuis PHP
    Par cocaetjusdorange dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2006, 11h10
  4. Lire un fichier txt par http (C sous Linux)
    Par sleg dans le forum Réseau
    Réponses: 4
    Dernier message: 18/10/2005, 11h07
  5. Réponses: 4
    Dernier message: 05/10/2004, 17h11

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