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 :

lecture de fichier en parametre avec fstream


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut lecture de fichier en parametre avec fstream
    Bonjour a tous,
    Je voudrais appeler mon programme avec le nom d'un fichier en parametre comme ca se fait en c, mais cette fiois ci en C++ et utiliser la commande fstream, le fichier donner en parametre est par la suite traiter dans le programe par un Parser. quelqu'un pourait il me dire comment je dois y procerder merci.
    mon code est le suivant mais ca ne marche pas
    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
     
    %{
    #include <stdio.h>
    #include <string.h>
    #include <fstream.h>
    #include <iostream.h>
     
    /* extern fstream yyin;*/
     
    int yyparse(void);
    extern int yylex(void);
     
    void yyerror(const char *str)
    {
            fprintf(stderr,"error: %s\n",str);
    }
     
    int yywrap()
    {
            return 1;
    }
     
    %}
     
    %start ...
    %token ...
     
    %%
    ....
    ....
    ....
    .
    .
    .
    .
    %%
     
     
     
    int parser(int argc, char **argv)
    {
     
    	 char *ligne;
    	 ifstream yyin(argv[0]);
    	 if(!yyin) {
    	 	printf("Source file \"%s\" not correct.\n",argv[0]); exit(3);
    	 } else 
    	 	while (getline( yyin, ligne ) ){  
                        cout << ligne << endl;     /*lecture du fichier */
    	 	    yyparse();
    		}
    		yyin.close();	  
    	      	return(0);
    }
     
    int main( int argc, char **argv )
    {
              ++argv, --argc; 		 /* skip over program name */
              if ( argc > 0 )   return(parser(argc, argv));
     
    	     else { printf("Error Enter a File\n"); exit(3);}
    }
    merci de me repondre

  2. #2
    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
    Il me semble que la version C++ de Bison prend un istream&, en paramètre de yyparse(). Mais ça fait bien longtemps tout ça, à vérifier.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    Merci deja pour ta reponse Loulou, j'ai regarde dans ce sens mais je n'y arrive tjrs pas, sinon tu m'as indique istream& qui traite plutot des chaine de caractere et non des fichiers. Avec c on a quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    extern FILE *yyin;
    int main( int argc, char **argv )
    {
              ++argv, --argc; 		 /* skip over program name */
             yyin = fopen( argv[0], "r" );
             yyparse();
             fclose(yyin);
    	 return(0);
    }
    et moi je voudrais utiliser ofstream a la place de fopen
    Merci encore

  4. #4
    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
    std::istream est la classe de base de tout flux d'entrée, donc en l'occurence de std::ifstream. Prendre un std::istream&, ça permet de ne pas se limiter aux fichiers mais de traiter également l'entrée standard, les flux-chaînes, ou encore n'importe quel flux perso dérivant de std::istream.

    std::ofstream c'est pour manipuler un fichier en écriture, donc ce n'est pas ce que tu veux ici.

    Sinon plus généralement, une recherche rapide sur Google avec "istream bison" devrait te donner quelques pistes.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    Normalement c'est dans ce genre là
    Mais il y a un inconvénient à lire ligne par ligne
    dans le cas ou les lignes sont plus grande que le tableau.


    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
     
    ifstream yyin;
    const long BUFFERSIZE = 1024;
    char lineBuff[BUFFERSIZE];
    memset(lineBuff, ' ', BUFFERSIZE - 1);
     
    yyin.open(argv[0], ios::in );
     
    if ( yyin.is_open() )
    {
          while( yyin.good() )
          {
             yyin.getline (lineBuff, BUFFERSIZE );
             cout << lineBuff;
          }
          yyin.close();
    }

  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
    Normalement c'est dans ce genre là
    Ce que cherche notre ami c'est comment envoyer son fichier à Bison, pas comment utiliser les fstream

    Mais il y a un inconvénient à lire ligne par ligne
    dans le cas ou les lignes sont plus grande que le tableau
    Suffit d'utiliser la bonne fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ifstream yyin(argv[0]);
     
    string lineBuff;
     
    if (yyin) 
    { 
        while (getline(yyin, lineBuff) )
            cout << lineBuff; 
    }

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    bonjour a tous,
    dommage je ne trouve tjrs pas une solution a ce probleme et comme le disait Loulou c'est bien de std::ifstream pour manipuler les fichiers en lecture donc j'ai besoin

  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
    http://www.gnu.org/software/flex/manual/html_node/flex_19.html

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 60
    Par défaut
    Le lien donne par Loulou24 va bien dans le sens mais je ne reussis toujours pas a envoyer au scanner le contenu d'un fichier donner en entree. j'ai aussi parcouru les liens suivants sans aucun resultats.
    http://lists.gnu.org/archive/html/help-bison/2000-12/msg00006.html
    http://compilers.iecc.com/comparch/article/03-01-034
    un petit exemple m'aiderait
    merci

Discussions similaires

  1. Lecture de fichier XML généré avec SOAP
    Par Erkcy dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 09/01/2008, 22h22
  2. Lecture de fichier binaire fortran avec java
    Par bigbrother737 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 10h34
  3. Lecture de fichier : Probleme avec les string
    Par soda_o_rat dans le forum SL & STL
    Réponses: 10
    Dernier message: 11/08/2005, 22h59
  4. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00
  5. Réponses: 12
    Dernier message: 14/06/2004, 13h06

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