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 :

Récupération valeurs, fichier texte


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut Récupération valeurs, fichier texte
    Bonjour tout le monde,

    Je post car j'aurais besoin d'un peu d'aide sur l'extraction de valeurs dans un fichier texte.

    J'ai donc un fichier texte qui se constitue comme suit :

    Puissance moteur [kW] : 3200
    Rendement moteur : 0.87
    Débit [m3/h] : 50000
    ...


    Je voudrais récupérer les valeurs en fin de phrase. N'y arrivant pas j'avais pensé d'abord mettre les ":" à la même distance sur chaque ligne histoire d'aller récupérer la valeur juste après un nombre de caractères précis. D'où le code suivant :
    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
     
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
     
    int main()
    {
    	ifstream base("D:/Utilisateurs/monNom/Desktop/test.txt");
    	if (base)
    	{
    		string ligne;
    		while (getline(base,ligne)) 
    		{
    			base.seekg(23, ios::beg);
    			double valeur;
    			base >> valeur;
    			cout << valeur << endl;
    		}
    	}
     
    	else
     
    	{
    		cout << "Ouverture impossible !" << endl;
    	}
    	return 0;
    }
    Bien évidemment en faisant ça je tourne en rond car je reviens sans arrêt au début du fichier.

    Je me pose donc deux questions :

    1- Comment lui dire de passer à la ligne suivante ?
    2- Pour le moment comme dans l'exemple, je mets tous les ":" en tant que 23 eme caractère de chaque ligne pour aller chercher le nombre après. N'y aurait-il pas une solution plus simple consistant simplement à aller chercher le seul nombre de chaque ligne ? En gros j'arrange mon fichier texte comme suit :


    Puissance moteur [kW] : 3200
    Rendement moteur------: 0.87
    Débit [m3/h]----------: 50000
    ...


    Merci d'avance pour votre aide.

    Bonne journée,
    Cdlt.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Tu peux renseigner le 3e argument de la fonction std::getline comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		string ligne;
    		while (getline(base,ligne,':')) // lecture jusqu'au caractère ':' de la ligne
    		{
    			double valeur;
    			base >> valeur;
    			cout << valeur << endl;
    			getline(base,ligne); // lecture du reste de la ligne
    		}
    Ou trouver ce caractère ':' dans chaque ligne lue, retenir ce qui vient après et le convertir en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		string ligne;
    		while (getline(base,ligne))
    		{
    			double valeur = stod( ligne.substr(1 + ligne.find(':')) ); // stod C++11
    			cout << valeur << endl;
    		}

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Bonjour Winjerome,

    Merci beaucoup ça marche nickel. Par contre je ne sais pas pourquoi, le premier code répète deux fois la dernière valeur lue. Genre il me met "1 ,2, 3, 4, 4" alors que le deuxième code lui mettrait "1, 2, 3, 4" (en considérant les ',' comme des endl).

    Bonne journée.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu dois avoir une dernière ligne non vide, tu effectues alors une dernière itération, mais vu qu'il n'y a plus de nombre, la lecture base >> valeur; échoue et on conserve la dernière valeur.
    On peut alors rajouter le test comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		string ligne;
    		double valeur;
    		while (getline(base,ligne,':') && base >> valeur) // lecture jusqu'au caractère ':' de la ligne + lecture de la valeur
    		{
    			cout << valeur << endl;
    			getline(base,ligne); // lecture du reste de la ligne
    		}

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 27
    Points
    27
    Par défaut
    Ah d'accord en effet c'est bien ça. Merci encore beaucoup.

    Bon dimanche.

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

Discussions similaires

  1. Récupération de valeurs a partir d'un fichier texte
    Par D_light dans le forum Shell et commandes POSIX
    Réponses: 4
    Dernier message: 08/11/2012, 14h56
  2. Probleme récupération valeurs fichier .csv
    Par fredrizk dans le forum C++
    Réponses: 1
    Dernier message: 07/07/2011, 17h15
  3. Récupérer valeur fichier texte
    Par Snake-Eyes dans le forum C++
    Réponses: 12
    Dernier message: 27/05/2009, 09h32
  4. récupération données (fichier texte)
    Par Elstak dans le forum C
    Réponses: 9
    Dernier message: 21/04/2007, 17h35
  5. [VBA-E] Récupération données fichier texte
    Par Theo28fr dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/07/2006, 08h08

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