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 :

transformer un tableau de char en string puis en float?


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 32
    Par d�faut transformer un tableau de char en string puis en float?
    Bonjour,

    j'imagine que cette question est souvent revenue, mais il y a-t-il un moyen simple de tranformer un tableau de char en float?

    En fait mon probl�me est le suivant: j'ai un fichier txt avec plein de donn�es r�elle, et je souhaiterais les r�cup�rer dans un tableau... voilou, peut-�tre qu'il existe un moyen simple de faire �a, car j'ai beau chercher, j'ai l'impression qu'il n'existe rien alors que c'est quand meme quelque chose de basique... J'ai essay� plusieurs trucs de forum, mais rien de bien convaincant..
    Merci
    mouton

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    Pourquoi ne pas utiliser mes flux pour ta lecture et injecter la valeur lue directement dans un float :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    // a adapter évidemment !
    std::ifstream fichier(nom_de_mon_fichier.c_str());
    float valeur;
    fichier>>valeur;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 32
    Par d�faut
    .. c'est quoi la diff�rence entre fichier et nom_de_fichier si j'�cris:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    f=fopen("test1.txt","r");

    (dsl moi=newby)

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par maf.mouton Voir le message
    (dsl moi=newby)
    Cours et FAQ.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    // a adapter évidemment !
    std::string nom_de_mon_fichier("test1.txt"); // chaine de caractère contenant le nom du fichier à ouvrir
    std::ifstream fichier(nom_de_mon_fichier.c_str()); // flux ouvert sur le fichier que l'on souhaite lire
    float valeur;
    fichier>>valeur;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 32
    Par d�faut
    ...comprend pas trop, enfin on va essayer...

    je dois �crire �a alors:


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    std::string f("test1.txt"); // chaine de caractère contenant le nom du fichier à ouvrir
    std::ifstream f2(f.c_str()); // flux ouvert sur le fichier que l'on souhaite lire
    float valeur;
    f2>>valeur;
    et en plus supprimer le fopen???

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 32
    Par d�faut
    Je donne aussi un extrait des fichiers de donn�es....:

    8.56260000 -0.99870000 -0.51240000 207 207 207
    8.54840000 -0.99990000 -0.51160000 193 193 193
    8.55960000 -1.00410000 -0.51220000 139 139 139
    8.57160000 -1.00820000 -0.51290000 50 50 50
    73.95980000 -8.72430000 -4.42530000 181 181 181
    8.57120000 -1.01390000 -0.51290000 123 123 123
    8.55720000 -1.01510000 -0.51210000 200 200 200
    8.54770000 -1.01690000 -0.51160000 210 210 210
    8.54960000 -1.01990000 -0.51170000 215 215 215

    il y a 6 colonnes (et bcp plus de lignes) et on souhaite r�cup�rer les 4 premi�re lignes qui sont en fait le (x,y,z,couleur) d'un nuage de point...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    32
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 32
    Par d�faut
    oki j'arrive � r�cup�rer chacune des lignes s�par�ment gr�ce � la faq C++....
    mainteant, stocker dans un tableau de float et puis je serais contente pour la journ�e ....

  8. #8
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Regarde std::vector pour le tableau.

  9. #9
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Pour r�pondre � ta question:fopen est une fonction issue du C, qui manipule typiquement des File Descriptor cach� dans la structure FILE.

    Le C++ pr�f�re travailler sur base de flux de donn�es, dont les classes ifstream (i pour input, f pour file ) et ofstream (o pour output, f pour... file itou).

    Elles sont cr��es de mani�re � fournir une interface commune quelle que soit la donn�e � lire (ou � �crire), et fonctionne "naturellement" quel que soit le type primitif utilis�, ainsi que s'il est n�cessaire d'�crire des chaines de caract�res.

    Il est �galement possible de d�finir les op�rateurs de flux << (pour l'�criture) et >> (pour la lecture) de tes structures de donn�es personnalis�es


    Il existe un principe nomm� RAII (Ressource Acquisition Is Initialisation) qui consid�re qu'il faut qu'une variable soit correctement initialis�e d�s le moment o� elle est d�clar�e.

    Du point de vue des flux de fichier, cela se traduit par le fait que, d�s que l'on en d�clare un, il faut �tre en mesure de lire (ou d'�crire, selon le cas) dans ce fichier.

    Le but est, en d�finitive, de simplifier le plus possible l'utilisation de ces flux

    Il existe un certain nombre de possibilit�s de cr�er un fichier, dont celle propos�e par 3DArchi (qui est celle � pr�f�rer aussi souvent que possible), qui n�cessite, pour une question purement historique, de fournir le nom du fichier sous la forme d'une chaine de caract�res "C style" (un tableau de caract�res termin� par un '/0'.

    Tu peux donc d�cider de cr�er un flux de lecture dans un fichier sous la forme de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    std::ifstream ifs("mon_fichier.txt");
    /* ici vient la lecture du fichier */
    Mais, cela implique un probl�me de taille: la lecture ne pourra se faire que... dans mon_fichier.txt...

    Si, par la suite, tu d�cider de cr�er un autre fichier qui pourrait �tre lu de mani�re identique � mon_fichier.txt, tu sera oblig� de... recopier exactement le m�me code pour ce deuxi�me fichier, ce qui, il faut l'avouer, n'est pas des plus efficaces

    L'id�e est donc de "factoriser" l'ouverture et la lecutre du fichier dans une fonction, et de fournir � cette fonction le nom du fichier sous la forme d'une chaine de caract�res que l'on souhaite ouvrir.

    Pour manipuler les chaines de caract�res, nous utilisons la classe string, disponible dans l'espace de noms std par inclusion du fichier d'en-t�te <string> de pr�f�rence � toute autre alternative issue du C (dont les fameuses chaines de caract�res C style).

    Pour passer une chaine de caract�res en param�tre d'une fonction qui ne doit pas modifier la chaine en question, l'id�al reste toujours de la transmettre sous la forme d'une r�f�rence constante.

    Mais, l'aberration historique aidant, il faudra, uniquement pour permettre d'ouvrir le fichier, convertir cette chaine de caract�res de type string en une chaine de caract�res C style.

    Il se fait qu'il est tr�s facile d'y arriver, car il existe une fonction membre de la classe string pr�vue � cet effet: la fonction membre c_str().

    Tu en arrives donc � une fonction dont la forme sera proche de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TypeDeRetour lecture(std::string const& filename)
    {
        /* ouverture du fichier */
        std::ifstream ifs(filename.c_str());
        /* lecture du fichier 
         * ...
         * retour éventuel
         */
    }
    Il sera ensuite assez facile de d�cider le fichier que tu veux lire en donnant simplement le nom de ce fichier comme argument � la fonction.

    Cela peut prendre la forme "simple" de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    lecture("mon_fichier.txt");
    mais cela peut tout aussi bien prendre une forme plus complexe proche de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    std::string tempname("c:\\");
    /*rajoutons le chemin d'acces au fichier */
    tempname+="Program Files\\mon application\\ data";
    /* créons dix noms de fichiers à lire de manière dynamique */
    for (int i = 1;i<=10;++i)
    {
        /*stringstream est un flux de conversion "bi directionnel" */
        std::stringstream ss;
        ss<<tempname<<"mon_fichier_"<<i<<".txt";
        filename=ss.str();
        lecture(filename);
    }
    qui aura, selon l'exemple, comme r�sultat de lire les fichiers nomm�s resectivement mon_fichier_1.txt, mon_fichier_2.txt,(... tous les autres ...) ,mon_fichier_10.txt qui se trouvent dans c:\Program Files\mon application\data
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. Convertion pointeur tableau de char EN string
    Par radlabo94 dans le forum C++
    R�ponses: 5
    Dernier message: 27/05/2014, 15h07
  2. [D�butant] Convertir un tableau de char en string
    Par Ludovic_R_37 dans le forum VB.NET
    R�ponses: 2
    Dernier message: 29/08/2013, 17h14
  3. Transformer un tableau de Byte en string
    Par kinouseb dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 13/01/2009, 17h09
  4. tableau de char vers string hexa
    Par andromeda dans le forum Entr�e/Sortie
    R�ponses: 4
    Dernier message: 22/07/2007, 23h10
  5. [Debutant]String en tableau de char
    Par amel2006 dans le forum Collection et Stream
    R�ponses: 6
    Dernier message: 05/03/2006, 10h33

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