Vérifier le format d'un ShortString [Résolu]

Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
- - Dernière réponse : zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
- 18 févr. 2008 à 17:08
Bonjour à tous,

Je souhaite récupérer depuis un fichier *.ini le format qui va être appliqué pour afficher les flottants, grâce à la fonction FormatFloat:
function FormatFloat(const Format: string; Value: Extended): string;

Lors de la lecture de ce paramètre, par la fonction ReadString:
function ReadString(const Section, Ident, Default: String): String; override;

je voudrais vérifier que cette chaîne est bien conforme pour être passée en argument de la fonction FormatFloat. J'ai commencé à écrire une procédure affreuse avec des if sur tous les caractères de la chaîne, mais c'est illisible. N'y aurait-il pas une méthode plus élégante et surtout plus efficace pour vérifier le format de cette chaîne ?

Bon week-end;
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
3
Merci
var
  S,
  Section,
  Valeur : string;
  i      : integer;
  Flt    : Extended;
begin
  S := Ini.ReadString(Section, Valeur);

  i := Pos(',', S);
  if i = 0 then
    i := Post('.', S);

  if i <> 0 then
    S[i] := DecimalSeparator;

  if not TryStrToFloat(S, Flt) then
    MessageDlg('Erreur convertion flottant de la valeur ['+Section+']:'+Valeur,mtWarning, [mbOk], 0);
end;







<hr size="2" width="100%" />


http://deefaze.gnomz.com

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
Lit une valeur flottante dans un fichier INI.

Syntaxe Delphi :

functionReadFloat (constSection,Ident:String;Default:Double):Double;override;

Syntaxe C++:

virtual double __ fastcallReadFloat(constAnsiStringSection,constAnsiString Name,doubleDefault);

Description

Appelez ReadFloat pour lire une valeur flottante dans un fichier INI.Section identifie la section qui contient la clévoulue.Ident spécifie le nom de la clécontenant la valeur flottante àlire.Default est la valeur flottante àrenvoyer si :

la section n'existe pas ;
    la clén'existe pas ;
    la valeur de données n'a pas été affectée pour la clé.

en gros :

Flt := Ini.ReadFloat('MaSection', 'MonFlottant', ValeurParDefaut);
if Flt = ValeurParDefaut then
  { gestion du probleme probleme ... }
else
  S := FormatFloat('%.0n', Flt);

<hr size="2" width="100%" />
http://deefaze.gnomz.com
Commenter la réponse de f0xi
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
C'est une idée. Mais je voudrais couvrir le cas où le format spécifié est du genre:
 #,##0.00;(#,##0.00)
Même si, là, j'avoue qu'il faudrait être maso pour marquer cette valeur dans le fichier *.ini.

Par hasard, n'y aurait-il pas moyen de faire un teste en utilisant les expressions régulières ?

Merci quand même f0xi.
Commenter la réponse de zwyx
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
26 juillet 2018
11
0
Merci
Salut,

Regarde peut-être MatchesMask dans l'aide.
Commenter la réponse de Caribensila
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
Je viens de rentrer chez moi, donc je n'ai plus Delphi à disposition. Mais je regarderai ça lundi, dès la première heure.
Merci bien.
Commenter la réponse de zwyx
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
@foxi :
pour info, je ne vois plus l'image deefaze.gif..

cantador
Commenter la réponse de cs_cantador
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
Effectivement f0xi, j'ai finalement pensé à cette solution qui semble la meilleure, à savoir, essayer une conversion, au lieu de vérifier la validité du format. Si la conversion n'a pas déclenché d'exception, c'est que le format est correct. Ca paraît tellement évident une fois qu'on a la solution.

En plus, je vais directement recopier tes quelques lignes qui règlent le problème du séparateur décimal (point ou virgule).

Merci beaucoup !
Commenter la réponse de zwyx