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++Builder Discussion :

Convertion d'un Tableau AnsiString en double


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut Convertion d'un Tableau AnsiString en double
    bonjour je voudrais savoir comment je pourrai faire pour effectué un convertion d'un tableau AnsiString en double

    Merci

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    pour convertir un AnsiString en double tu peut utiliser la méthode ToDouble de la classe AnsiString, mais il faut que ton AnsiString contienne bien un chiffre et pas autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    AnsiString test;
    double testEnDouble;
     
    //Ok
    test = "2,56";
    testEnDouble = test.ToDouble();
     
    //Non Ok
    test = "2,59 mm"
    testEnDouble = test.ToDouble();

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            int j;
            double xd[1000],yd[1000];
            for(j=0;j<nbrligne;j++)
            {
                    xd[j]=x[j].ToDouble();
            }
    C'est un tableau AnsiString que je dispose et je doit mettre ce tableau en double .

    je vien de faire ce que tu viens de me dire mais avec les tableaux sa ne fonctionne pas

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Si tu as déclaré x de cette manière ca devrait fonctionner :


  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    c'est le cas tien je te montre le code avec la déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AnsiString x[1000],y[1000];
    int j;
            double xd[1000],yd[1000];
            for(j=0;j<nbrligne;j++)
            {
                    xd[j]=x[j].ToDouble();
            }
    Car mon but de cette conversion c'est de pouvoir rentrer les valeur du tableau dans la fonction de l'histogramme et pouvoir faire l'histogramme

    les valeurs en AnsiString je les est recuperées dans un fichier TXT

    Cette conversion avec ce code ne fonctionne pas

  6. #6
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Essaye plutôt de passer par une TStringList que par un vecteur d'AnsiString, a mon avis ça passera mieux.

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Maintenant que j'ai fait toute ma lecture de fichier j'ai passé la journée dessus est sa marche niquel il y a pas d'autre solution

  8. #8
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Si surement, mais la j'ai pas trop les moyen de tester de mon coté, donc ca attendra un peut a moins que quelqu'un d'autre puisse le faire avant.

    Désolé

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    d'après des test j'ai pue voir qu'en faite il prend pas les valeurs ex 2.4 il ve 2,4 voila donc je doit lire mon fichier et remplacer le point en virgule

  10. #10
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Oui effectivement, le ToDouble utilise la virgule et non le point

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Dans ce cas c'est assez simple.
    Il suffit simplement de tester si la chaîne contient un '.' et si oui le modifier en ','

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TStringList Fichier = new TStringList;
    Fichier->LoadFromFile(...);
    AnsiString N;
    int p;
    double *Tabx = new double[Fichier->Count];
    On va supposer que chaque chaîne peut comporter soit un '.' soit un ',' :
    Dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    N = Fichier->Strings[j];
    p = N.Pos(".");
    if(p!=0) N[p] = ','; // si '.' alors on le modifie en ','
    Tabx[j] = N.ToDouble(); // double dans le tableau
    Ne pas oublier qu'il faut, à un moment ou un autre, libérer la mémoire (donc ici, à ce stade, on ne sait pas quand) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    delete [] Tabx;
    Fichier->Clear;
    delete Fichier;
    Par contre, je ne vois pas l'utilité de passer par un fichier *.TXT (sauf pour faire écho au niveau littéral...) !
    Ne serait-il pas plus intéressant de travailller directement avec un *.BIN ?
    Un tableau de double, ça se sauvegarde avec fwrite et ça se lit avec fread (le tableau entier) !

    A plus !

  12. #12
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello

    Citation Envoyé par pottiez Voir le message
    Oui effectivement, le ToDouble utilise la virgule et non le point
    En fait ToDouble utilise DecimalSeparator, qui par défaut dépend de la localisation du poste...

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    AnsiString chaine;
    double valeur;
     
    DecimalSeparator = '.';
    chaine = "12.50";
    valeur = chaine.ToDouble();
     
    DecimalSeparator = ',';
    chaine = "12,50";
    valeur = chaine.ToDouble();

  13. #13
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonsoir,

    Effectivement, la meilleur solution c'est d'utiliser une de ces propositions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DecimalSeparator = '.' ; 
    // OU BIEN 
    DecimalSeparator = ',' ;
    Le mieux serai de le faire au moment de la création de la fiche principale.

    De ma part, au moment du chargment/Lecture de ton fichier, tu convertis les données directement en double, ça evite de déclarer deux tableaux.

    @+

Discussions similaires

  1. Convertion d'un tableau Object en tableau d'une classe spécifique
    Par 0redd dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 22/07/2010, 01h20
  2. Réponses: 13
    Dernier message: 16/03/2008, 13h35
  3. convertion entier dans tableau
    Par mmarcoboss dans le forum C
    Réponses: 2
    Dernier message: 24/11/2006, 11h59
  4. convertion pointeur vers tableau
    Par gdpasmini dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2006, 00h34
  5. tableau de hachage à double entrée
    Par bikochuu dans le forum Langage
    Réponses: 1
    Dernier message: 04/11/2005, 10h58

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