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 :

[STL] fichier et vecteur


Sujet :

SL & STL C++

  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut [STL] fichier et vecteur
    Bonjour tout le monde,

    voilà, j'ai un fichier qui ressemble à cela:
    10
    20
    30
    40
    en fait, ce fichier définit un tableau de int, chaque élément étant séparé par un retour chariot (\n).

    J'ai fais une petite fonction qui me lis ce fichier et qui m'en fait un vector de int (code adapté d'un bout de code du gotw #18... j'ai découvert ce site il y a pas longtemps (mieux vaut tard que jamais ), c'est une mine!! ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ifstream f;
    f.open("monfichier.txt");
     
    vector<int> e;
    copy( istream_iterator<int>( f ),
    	istream_iterator<int>(),
    	back_inserter( e ) );
    Maintenant, je voudrais pouvoir mettre un 2eme tableau dans ce fichier, par exemple:
    10
    20
    30
    40

    20
    30
    40
    50
    Le problème, c'est que le code ci-dessus "ignore" la ligne vide et me créé un seul tableau de 8 élément. Alors que je voudrais faire 2 tableaux de 4 éléments chacuns.

    Auriez-vous une idée pour dire à la fonction copy() de s'arêter [de copier] lorsque le stream d'entrée est une ligne vide?

  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 n'y a pas tellement de moyens d'utiliser autre chose que la fin de fichier pour définir un istream_iterator de fin. Enfin, de manière plus exacte, l'extraction s'arrête dès que le flux rencontre une erreur.

    La seule solution ici c'est de se taper l'extraction à la main avec une petite boucle.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    naaaa pas une boucle!!!

    bon bah, il me reste 2 solutions:
    1) je reprend ma première implémentation (plein de for, while, if, else...) de mon lecteur
    2) je vais me suicider...

    Hum... la première solution n'est pas trés séduisante, mais elle l'est plus que la deuxième

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Options à creuser:
    1- écris ton propre streamligne_iterator<TonType> qui lira à coup de std::getline, puis appellera l'opérateur d'extracton du type template sur chaque ligne obtenue. Sur une ligne vide, voir à invalider le flux, ou à avoir un second paramètre qui serait une politique d'arrêt

    2- filtre ton flux (-> streambuf_iterator, cf FAQ fclc++, articles de James Kanze, boost.iostream) pour insérer un '#nawak-pas-nombre#' sur les lignes vides.
    Ta lecture de nombres plantera donc. Il faudra penser à restaurer les bits d'état du flux, nétoyer la ligne superflue et reprendre.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. [Débutante] Pb Eclipse + accès fichier + de vecteurs
    Par kenza28684 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 07/11/2009, 09h48
  2. Lire un fichier de vecteur serialisé
    Par alexorcet dans le forum Général Java
    Réponses: 8
    Dernier message: 21/05/2008, 14h12
  3. [STL] fichier et vecteur II
    Par r0d dans le forum SL & STL
    Réponses: 2
    Dernier message: 29/06/2007, 18h57
  4. [STL] Manipuler des vecteurs de vecteur
    Par FabaCoeur dans le forum SL & STL
    Réponses: 6
    Dernier message: 28/04/2007, 20h09
  5. Réponses: 2
    Dernier message: 04/04/2007, 10h34

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