EXTRAIRE UN CHIFRE D'UN STRING APRÈS UNE CERTAINE POSITION

fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 - 2 juin 2002 à 18:06
fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 - 2 juin 2002 à 18:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11957-extraire-un-chifre-d-un-string-apres-une-certaine-position

fabiin Messages postés 329 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 8 décembre 2009 6
2 juin 2002 à 18:06
ah ouais g fai pleisn de conneries
merci
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
2 juin 2002 à 15:00
Et si au lieu d'une fonction tu déclarais une procédure avec un paramètre var de type différent dans chaque déclaration et que tu déclarais chaque procédure comme overload :
procedure ExtraireChiffreApres(Source: string; Dep: integer; out Valeur : integer);overload;
procedure ExtraireChiffreApres(Source: string; Dep: integer; out Valeur : int64);overload;
procedure ExtraireChiffreApres(Source: string; Dep: integer; out Valeur : Real);overload;

Ainsi (valable à partir de Delphi 4), le compilateur reconnait quelle procédure appeler en fonction du type du paramètre "valeur".
Qu'en penses-tu ?

Dernière chose, où est déclarée la fonction Mid dans : "valu := mid(Source,a,1)[1];"
Elle n'existe pas dans D4 mais peut être remplacée par Copy.

Autre proposition pour améliorer la lisibilité, au lieu de :
if ((Ord(valu)>=48) and (Ord(valu)<=57)) or (Ord(valu)=45) then
mettre :
if valu in ['0'..'9','-'] then
Reconnais que c'est nettement plus lisible et plus facile à comprendre !

Enfin, pour éviter les plantages violents, il serait bon d'utiliser StrToIntDef au lieu de StrToInt. Ainsi :
Result := strtoint(num);
devient
Result := StrToIntDef(num, 0);
Et tu es assuré d'une valeur de retour même dans le cas où tu renvoies un type réel comme résultat dans le paramètre Valeur puisqu'il y a compatibilité de type dans ce sens.

May Delphi be with you.
Rejoignez-nous