Page 1 sur 2
Petit mais costaud !
Publié : dim. 06/oct./2013 18:10
par falsam
Quelqu'un pourrait il tester non pas la procédure mais le poids de l’exécutable de cette procédure ?
Code : Tout sélectionner
;
; Is numeric
Procedure.b IsNumeric(Expression.s)
Protected *RegMatch, Value.b
*RegMatch = CreateRegularExpression(#PB_Any ,"^[-]?\d*[.,]?\d*$")
Value = MatchRegularExpression (*RegMatch, Expression)
FreeRegularExpression (*RegMatch)
ProcedureReturn Value
EndProcedure
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:35
par coxco
Salut
L'executable fait 68,0 Ko (69 632 octets) avec PB 4.60 !
C'est ça que tu voulais ?
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:38
par nico
171 Ko avec Window 7 64 bits compiler avec PB 5.20 x64
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:41
par falsam
nico a écrit :171 Ko avec Window 7 64 bits compiler avec PB 5.20 x64
J'arrive aussi à ce résultat sous Windows 7 64 Bits PB 5.20 (x86). C'est ce qui m'a étonné !
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:46
par falsam
coxco a écrit :L'executable fait 68,0 Ko (69 632 octets)
Avec les version précédentes de Pure basic (4.51) ce même code fait effectivement cette taille là. Je ne comprends pas pourquoi cette simple portion de code fait maintenant 171 ko.
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:47
par coxco
Faut voir avec M.FRED

Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:48
par Ar-S
161 ko sous W8 x64 compilé en PB 5.20 x86
Rien de coché dans les options de compilation.
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 18:50
par coxco
J'ai essayé avec PB 5.00 X64 il fait 92,0 Ko (94 208 octets)
et avec PB 5.00 X32 88,0 Ko (90 112 octets)
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 19:04
par Fred
La lib des regexp integrée (PCRE) dans les nouvelles versions est plus complète (support UCP pour l'unicode), donc plus large.
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 19:08
par nico
Oui mais faut prendre en compte l'évolution de la librairie PCRE, il y a une grosse différence par exemple entre la 8.31 et la 8.33
Re: Petit mais costaud !
Publié : dim. 06/oct./2013 19:09
par falsam
Merci Fred pour cette information.
En tout cas ça me rassure. Un petit utilitaire (1200 lignes environ) que je code actuellement avait doublé sa taille d'exe en ajoutant juste cette procédure et je pensais avoir choper une saloperie jusqu'à que je comprenne que cette procédure en était la cause.
Merci à vous tous pour ces réponses rapides

Re: Petit mais costaud !
Publié : mer. 09/oct./2013 18:24
par falsam
Ma procédure IsNumeric() fait environ 170 Ko soit pratiquement la moitié du poids d'un utilitaire que je suis en train de finaliser. Si quelqu'un a mieux, je suis preneur. Merciiiiii
PS : Si je fais trop une fixation sur ce poids, n'hésitez pas à me le dire aussi

Re: Petit mais costaud !
Publié : mer. 09/oct./2013 20:28
par Micoute
Bonsoir falsam, je ne sais pas si ça peut t'aider, mais j'ai ça !
ProcedureDLL.b IsNumericAscStr(Caractere.l)
; déterminer si la valeur du caractère ASCII donné est un nombre [0-9]
If (Caractere >= 48) And (Caractere <= 57)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
ProcedureDLL.b IsNumericStr(Caractere.s)
; déterminer si le premier caractère de la chaîne est un nombre [0-9]
Protected Resultat.b
Resultat = #True
If Len(Caractere) > 0
Resultat = IsNumericAscStr(Asc(Mid(Caractere, 1)))
EndIf
ProcedureReturn Resultat
EndProcedure
ProcedureDLL.b IsAlphaNumericStr(Caractere.s)
; détermine si le premier caractère de la chaîne est un caractère alphanumérique [A-Z a-z 0-9]
Protected Resultat.b
Resultat = #False
If Len(Caractere) > 0
Resultat = IsAlphaNumericAscStr(Asc(Mid(Caractere, 1, 1)))
EndIf
ProcedureReturn Resultat
EndProcedure
Re: Petit mais costaud !
Publié : mer. 09/oct./2013 20:35
par Backup
nettement plus court :
Code : Tout sélectionner
Procedure IsNumeric(str$)
; Dr Dri ...
Protected *c.Byte
*c = @str$
If *c\b = #NULL
ProcedureReturn #FALSE
EndIf
While *c\b <> #NULL
If *c\b < '0' Or *c\b > '9'
ProcedureReturn #FALSE
EndIf
*c + 1
Wend
ProcedureReturn #TRUE
EndProcedure
debug IsNumeric("azafdf")
debug IsNumeric("a654")
debug IsNumeric("458")
; EPB
Re: Petit mais costaud !
Publié : mer. 09/oct./2013 20:43
par falsam
Merci Micoute et Dobro. Dobro je prends ton code qui est plus court et bien plus léger dans l'éxécutable

Merci encore