bonjour je voudrais savoir comment je pourrai faire pour effectué un convertion d'un tableau AnsiString en double
Merci
Version imprimable
bonjour je voudrais savoir comment je pourrai faire pour effectué un convertion d'un tableau AnsiString en double
Merci
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:
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();
C'est un tableau AnsiString que je dispose et je doit mettre ce tableau en double .Code:
1
2
3
4
5
6 int j; double xd[1000],yd[1000]; for(j=0;j<nbrligne;j++) { xd[j]=x[j].ToDouble(); }
je vien de faire ce que tu viens de me dire mais avec les tableaux sa ne fonctionne pas
Si tu as déclaré x de cette manière ca devrait fonctionner :
Code:AnsiString x[1000];
c'est le cas tien je te montre le code avec la déclaration
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'histogrammeCode:
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(); }
les valeurs en AnsiString je les est recuperées dans un fichier TXT
Cette conversion avec ce code ne fonctionne pas
Essaye plutôt de passer par une TStringList que par un vecteur d'AnsiString, a mon avis ça passera mieux.
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
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é
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
Oui effectivement, le ToDouble utilise la virgule et non le point :king:
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 :
On va supposer que chaque chaîne peut comporter soit un '.' soit un ',' :Code:
1
2
3
4
5
6 TStringList Fichier = new TStringList; Fichier->LoadFromFile(...); AnsiString N; int p; double *Tabx = new double[Fichier->Count];
Dans la boucle :
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:
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
Par contre, je ne vois pas l'utilité de passer par un fichier *.TXT (sauf pour faire écho au niveau littéral...) !Code:
1
2
3
4 delete [] Tabx; Fichier->Clear; delete Fichier;
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 !
Hello
En fait ToDouble utilise DecimalSeparator, qui par défaut dépend de la localisation du poste...
Donc:
Code:
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();
Bonsoir,
Effectivement, la meilleur solution c'est d'utiliser une de ces propositions :
Le mieux serai de le faire au moment de la création de la fiche principale.Code:
1
2
3
4 DecimalSeparator = '.' ; // OU BIEN DecimalSeparator = ',' ;
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.
@+