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 :

Passage en paramètres de flux de fichier


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Par défaut Passage en paramètres de flux de fichier
    Bonjour à tous,

    J'ai une routine assez longue à coder de lecture/écriture de fichier et comme certaine partis pourraient être traitées avec des fonction à part, j'aimerais passer en paramètre à ces fonction la position du flux que je lis/écris.

    Déjà j'aimerais savoir si c'est possible et ensuite comment on déclare de tels flux dans le passage de paramètre ?
    Ce serait quelque chose comme :
    void construc_ligne(oftream(?) nomflux, char * [11] nomfich) ?

    Comme je ne sais pas si je m'explique bien, voici mon bout de code comme exemple plus concret :
    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
    void Dune::build_table(Vecteurdunes vd, int srid, char date[11] , int temps_relatif)
    {
        int nbd, j, nbp;
        double nx, ny, nz ;
        Point p;
     
        char nsql[taille];
        ofstream fich(nsql, ios::app);
     
         if(!fich)
             cout<<"... !\n";
         else
         {
            for(int i=0; i<nbd; i++)
            {
     
                if (!entree)
                {
                    cout << " \n ...!! \n" ;
                }  
                else // fichier dune ouvert
                {
                    while (entree.eof()==false)
                    {
                         //fonction lecture fichier
                         entree >> nom; //lecture de la première ligne
                         entree >> id;
                         entree >> nbp;
                         //construction des X de la ligne de crête
                         for (j=0; j<nbp; j++)
    A ce stade là je voudrais créer ma fonction de construction de ligne et lui passer en paramètre le flux que j'ai appelé "entree"
    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
                         crete.construc_ligne(oftream(?) entree, char[11] nomfich);
                         {
                             entree >> nx;
                             p.set_x(nx);
                             crete.ajout_point(p);
                         }
                         for (j=0; j<nbp; j++) //construction des Y de la ligne de crête
                         {
                             entree >> ny;
                             p = crete.get_point(j);
                             p.set_y(ny);
                             crete.set_point(p, j);
                         }
                         for (j=0; j<nbp; j++) //construction des Z de la ligne de crête
                         {
                             entree >> nz;
                             p = crete.get_point(j);
                             p.set_z(nz);
                             crete.set_point(p, j);
                         }
                     }
                     crete.L.erase(crete.L.begin(), crete.L.end());
                 }//fin fichier dune ouvert
             }//fin pour le i em fichier ouvert du vecteur dune
         }/*FIN SET_info*/
    }
    Merci d'avance pour vos réponses

    EDIT : Merci énormément à celui qui a modifié l'apparence du code, c'est beaucoup plus clair comme ça !! J'ai bien tenté de faire comme dans les autres post, mais je n'ai pas réussi à trouver comment faire.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Par défaut
    Salut,

    Je vois bien ce que tu veux dire. Je crois que tu as déjà presque trouvé la bonne solution . Si je ne m'abuse, il suffit de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE function(ifstream & file, ...)
    pour lire un fichier depuis la fonction function, ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE function(ofstream & file, ...)
    pour écrire. Attention néanmoins à passer le flux par référence &.

    Si je me trompe, merci de me corriger car je suis pas certain à 100% de ce que je dis.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Par défaut
    Je vais tester ça demain et je te dirais si ça marche : merci pour le conseil en tout cas

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Les flux de la stl ne sont pas copiable. Il faut donc les passer en argument soit par référence soit par adresse mais pas par valeur.

    La solution d'Asohan doit donc marcher.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Par défaut
    Hello à tous les deux !

    Alors, voici ce que j'ai déclaré (fichier de la classe "dune.h") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool set_table(ofstream);
    Voici comment je l'ai implémenté dans "dune.cpp" (ou peut importe le nom, ce n'est qu'un test tout bête pour le moment) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool Dune::set_table(ofstream & fichtest)
    {
        fichtest<<"T.E.S.T _ _ F.O.N.C.T.I.O.N "<<endl;
        fichtest<<"*** position dans la fonction même et écriture dans le fichier test "<<endl;
        return 1;
    }
    Voici comment je l'appelle dans une autre fonction (puisque c'est bien là le but) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char * nomtest = new char[20];	
    bool bip;
    nomtest = "TEST.txt";
    ofstream ftest(nomtest, ios::app);
    ftest << "Alors voila, c'est un test" << " "<<endl;
    bip = set_table(ofstream & ftest);
    cout <<"and the winner is ?" <<bip<<endl;
    et voici le message d'erreur qu'il me marque :
    Vous avez des idées pour corriger ça ?
    Merci d'avance :]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Par défaut
    Dans le fichier Dune.h, tu dois déclarer le prototype ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool set_table(ofstream & fichtest);
    C'est à dire de la même façon que dans le fichier .cpp sinon le compilateur va te faire un caca nerveux

    Donc : dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE function(/*Liste d'arguments*/);
    et dans le .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TYPE function(/*Liste d'arguments IDENTIQUE au .h*/)
    {
       // ...
    }
    C'est pour ça que tu as une erreur de prototype does not match.

    Sinon pour ton code, tu peux simplement passer le flux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    bip = set_table(ftest);
    ...
    pas besoin de mettre de référence ici.

    Ah oui et dernière petite chose : ta fonction set_table doit retourner un type bool alors retourne plutôt true que 1 (je sais je chipote sur des détails mais c'est pour la lisibilité du code).

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

Discussions similaires

  1. Appel d'un fichier PHP avec passage de paramètre
    Par Claude_Azoulai dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/09/2008, 15h27
  2. Passage de paramètre dans un fichier distant en javascript/ajax
    Par moook dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/06/2008, 13h51
  3. Réponses: 7
    Dernier message: 10/01/2007, 20h13
  4. Upload de fichiers et passage de paramètres
    Par the java lover dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 27/09/2006, 20h57
  5. passage de paramètres à un fichier SQL
    Par philfont dans le forum Administration
    Réponses: 5
    Dernier message: 30/08/2004, 15h01

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