Salut Japee.
Cette ligne : if not (S[i] = ' ') then se traduit en :
if S[i] <> '' then
"not equal" est équivalent de "different of"
Si Codial veut traiter plusieurs caractères, alors la formule suivante est plus adaptée :
//traitement des caractères espace et virgule
if not (S[i] in [' ', ',']) then...
<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<
Cependant j'ai testé la fonction de jappee et c'est bon je peux remplir ma table.
En fait c'est juste le traitement des espaces qui posait problème.
Je vous remercie pour vos réponses qui m'ont bien dépannées
Si vous aimez l'assembleur, il est amusant de regarder le déroulement de la fonction
StrToCurr
il y est fait appel à la procédure TextToFloat
X := StrToFloat(wEuros) est alors traduit en TextToFloat(PChar(wEuros),X,fvCurrency)
La fonction
TextToFloat
convertit sans erreur les chaines avec autant d'espace avant et après
la représentation numérique, mais s'il y en a un (espace) entre le
chiffres, après le signe, avant ou après le point, la conversion est
interrompue est une erreur est revoyée.
' +13.46' est bon
'+13.46 ' est bon
' +13.46 ' est bon
C'est bon à savoir ! Pas besoin de faire le ménage avant !
Tout autre espace inséré provoque une erreur. Même si on a pris la précaution de mettre ThousandSeparator :=' '; Je parlerai pour ma part de bug (et je sais de quoi je parle, je suis un gros producteur !
apparemment le seul séparateur des milliers admis en Delphi est le
point '.' : voir l'aide à la rubrique FormatFloat,fonction;
attention également on peut avoir la même erreur en récupérant des
données au format US ou la virgule est remplacée par le point décimal
d'autre part dans ce format le séparateur des milliers est la virgule
',' ce qui dans le cas de conversion d'une valeur entiére '40,000'
donnerais 40 pour résultat;
Le sujet est décidément intéressant et très ouvert
Les programmeurs Delphi dans le secteur bancaire, et plus
particulièrement concernant le marché des changes, doivent s'arracher
quelques cheveux, non ?
Tiens, j'ai trouvé une approche un peu plus concise que celle que je proposais plus haut :
function MyStrToCurr(S: String): Currency;
begin
Result := StrToCurr(StringReplace(S, ' ', EmptyStr, [rfReplaceAll]));