PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Extraire uniquement les chiffres d'une chaine
Extraire uniquement les chiffres d'une chaine
Débuté par Franck BASSIN, 06 nov. 2013 10:02 - 15 réponses
Membre enregistré
52 messages
Posté le 06 novembre 2013 - 10:02
Bonjour,

Je cherche à extraire les chiffres d'une chaîne.
Ex :
F00045 -> 00045
23F0RE43 -> 23043

J'ai essayé en utilisant les expressions régulières mais je me casse les dents...

Est-ce que quelqu'un peux me donner un coup de main (par les expressions régulières ou autre) ?

Merci
Posté le 06 novembre 2013 - 10:14
bonjour

tester chaque caractere un par un :
test est une chaine
I est un entier
pour I=1 a taille(chaineoriginale)
Test = milieu(chaineoriginale,I,1)
si test>="0" et test<="9" alors
// c'est un caractere numerique
fin
fin

bon devs
Membre enregistré
1 412 messages
Posté le 06 novembre 2013 - 12:29
Bonjour,

commence par ceci : http://doc.pcsoft.fr/fr-FR/?3013035&name=estnumerique_fonction&q=estnumerique&productversion=01F180063C&verdisp=180

ensuite on pourrais voir quelque chose comme

sMACHAINE est une chaîne
rMONRESULTAT est un réel
sMONTEMPON est une chaîne
SI EstNumérique(sMACHAINE) ALORS

rMONRESULTAT = Val(sMACHAINE)

SINON
pour I=1 a Taille(sMACHAINE )
SI EstNumérique(Milieu(sMACHAINE ,I,1)) OU Milieu(sMACHAINE ,I,1) = "," ALORS // je teste la virgule pour avoir la décimale

sMONTEMPON = sMONTEMPON +Milieu(sMACHAINE ,I,1)
FIN
rMONRESULTAT = Val(sMACHAINE)
FIN


--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Membre enregistré
1 412 messages
Posté le 06 novembre 2013 - 12:45
Bonjour,

commence par ceci : http://doc.pcsoft.fr/fr-FR/?3013035&name=estnumerique_fonction&q=estnumerique&productversion=01F180063C&verdisp=180

ensuite on pourrais voir quelque chose comme

sMACHAINE est une chaîne
rMONRESULTAT est un réel
sMONTEMPON est une chaîne
SI EstNumérique(sMACHAINE) ALORS

rMONRESULTAT = Val(sMACHAINE)

SINON
pour I=1 a Taille(sMACHAINE )
SI EstNumérique(Milieu(sMACHAINE ,I,1)) OU Milieu(sMACHAINE ,I,1) = "," ALORS // je teste la virgule pour avoir la décimale

sMONTEMPON = sMONTEMPON +Milieu(sMACHAINE ,I,1)
FIN
rMONRESULTAT = Val(sMACHAINE)
FIN


--
Bertin CARRIERE
Consultant & Formateur
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

Membre de http://www.be-dev.be
Posté le 08 novembre 2013 - 10:16
Bonjour,

Le plus simple est de faire une boucle sur tous les caractères de la chaine :

FONCTION Gs_ExtraitChiffres(sChaineÀVérifier est une chaîne)
sChaineNettoyée est une chaîne = ""
POUR i = 1 _À_ Taille(sChaineÀVérifier)
SI "0" <= sChaineÀVérifier[i] <= "9" ALORS
sChaineNettoyée += sChaineÀVérifier[i]
FIN
FIN
RENVOYER sChaineNettoyée


Exemple d'utilisation :
Trace(Gs_ExtraitChiffres("23F0RE43")) // affiche "23043"
Trace(Gs_ExtraitChiffres("Salut tout le monde !")) // affiche ""
Trace(Gs_ExtraitChiffres("42")) // affiche "42"
Trace(Gs_ExtraitChiffres("WebDev 12 et WinDev 15")) // affiche "1215"
Membre enregistré
15 messages
Posté le 08 novembre 2013 - 11:28
Bonjour,

Vous n'êtes pas nombreux a exploiter cette fonction qui est très utile et très rapide !

VérifieExpressionRégulière

Voici un exemple :

Valeur1,valeur2 sont des chaînes

Trace(VérifieExpressionRégulière("AEZ5645648", "([A-Z]+)([0-9]+)",Valeur1,valeur2))

Trace(Valeur1)
Trace(valeur2)

Mes salutations

--
@+ JoTech
Membre enregistré
15 messages
Posté le 08 novembre 2013 - 13:59
Effectivement, j'ai vu par la suite que dans le message source que vous parliez de "Expression Régulière" !

Mais effectivement si les chiffres et les lettres sont mélangé, là, il faut voir si la fonction windev VérifieExpressionRegulière est aussi puissante que celle de PHP !

Je fais une rapide recherche et je posterais ce que j'ai trouvé !

Mes salutations

--
@+ JoTech
Membre enregistré
15 messages
Posté le 08 novembre 2013 - 15:33
Voilà l'expression régulière que j'ai pu trouvé pour votre problème, je me suis limité à 10 chiffres

Si ça peut aider quelqu'un un jour !

Voici un exemple :

cValeurAnalyse est une chaîne
cExpression est une chaîne
Valeur1,valeur2,valeur3,valeur4,Valeur5,Valeur6,valeur7,valeur8,valeur9,valeur10 sont des chaînes
Valeur_Final est une chaîne

cValeurAnalyse = "A5Z4EZ48"

cExpression = ".[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*)[A-Z]*([0-9]*).*"

SI VérifieExpressionRégulière("A5Z4EZ48",cExpression,Valeur1,valeur2,valeur3,valeur4,Valeur5,Valeur6,valeur7,valeur8,valeur9,valeur10) = Vrai ALORS
Valeur_Final = Valeur1+valeur2+valeur3+valeur4+Valeur5+Valeur6+valeur7+valeur8+valeur9+valeur10
Trace(Valeur_Final)
FIN

Je suis certain qu'il y a plus court mais je n'ai pas trouvé pour l'instant !
Mais les manières décrites précédemment font très bien le travail

Mes salutations

--
@+ JoTech
Membre enregistré
52 messages
Posté le 08 novembre 2013 - 16:01
Merci pour votre aide.

Vous me confirmez ce que je pensais, à savoir que les expressions régulières ne sont pas si simples à utiliser ou du moins qu'elles ne sont pas forcément adaptées pour ce genre de problème !!!

Je pars sur la solution de parcours de la chaîne qui est basique mais efficace.

Merci à tous
Membre enregistré
962 messages
Posté le 09 novembre 2013 - 00:49
hello everybody,

il est dommage que la fonction VérifieExpressionRégulière ne soit pas aussi "balaise" que les fonctions Regexp des autres langages. Mais on peut facilement en Windev utiliser le regexp du vbscript en utilisant l'objet COM vbscript.regexp :
sTexte est une chaîne
MonRegexp est un objet OLE "vbscript.regexp"
MonRegexp>>GLOBAL = Vrai // on cherche toutes les occurrences
MonRegexp>>Pattern = "[^\d]" // le motif est "tous les caractères qui ne sont pas un digit"
sTexte = "F00045"
Trace(MonRegexp>>Replace(sTexte,"")) // on remplace les caractères qui ne sont pas des digits par rien
sTexte = "23F0RE43"
Trace(MonRegexp>>Replace(sTexte,""))
sTexte = "A1qcod2-sd345?SKDJF6f7rrrrrrrrr89"
Trace(MonRegexp>>Replace(sTexte,""))


Ami calmant, J.P
Membre enregistré
15 messages
Posté le 09 novembre 2013 - 09:53
Salut Jurassic,
Joli, justement je n'avais pas pensé à un objet OLE !

Je faisais justement la remarque le l'expression régulière sous d'autre langage comme le PHP ! mais c'est vrai qu'elle est très puissante sous vbscript !

Merci pour l'info

Salutations

--
@+ JoTech
Posté le 11 juillet 2025 - 12:13
sChaineInput est une chaîne = "23F0RE43"
sChaineOutput est une chaîne = ""

POUR i = Taille(sChaineInput) A 1 PAS -1
SI EstNumérique(sChaineInput[[i]]) ALORS
sChaineOutput += sChaineInput[[i]]
FIN
FIN

//sChaineOutput = 23043
Membre enregistré
1 330 messages
Posté le 11 juillet 2025 - 16:05
Salut à tous,

Sinon, je vous propose ceci (sans passer par un objet OLE sans rancune Jurassic Pork ;) )

sData est une chaîne // Contient les données à traiter
sDigits est une chaîne // Contiendra la liste des digits trouvés
sRegExp est une chaîne = "([0-9]{1,})" // Uniquement les chiffres de 0 à 9 ayant au moins 1 caractères à ...
tabListDigit est un tableau de chaînes // Contiendra la liste de tous les digits par bloc trouvé dans la chaine de base
nFound est un entier // Renvoie le nombre de bloc contenant des digits

nFound = RegexCherche(sData, sRegExp, tabListDigit)

POUR i = 1 _À_ nFound
sDigits += tabListDigit[i]
FIN


Bon Dev à tous
Daryl

--
http://www.concept4u2.com
Posté le 05 septembre 2025 - 16:09
sMaChaineDeTest est une chaîne = "Chaîne avec des chiffres 0123, des accents, des MAJUCULE et des caractères spéciaux 45+/:_<67>$-89"

trace(SansCaractère(ChaîneFormate(sMaChaineDeTest, ccMinuscule+ccSansAccent+ccSansPonctuationNiEspace), "abcdefghijklmnopqrstuvwxyz", sscTout))

//Affiche : 0123456789
Membre enregistré
6 messages
Posté le 08 septembre 2025 - 16:55
Ma pierre à l'édifice avec la fonction RegexRemplace :

sChaineInput est une chaîne = "23F0RE43"
sChaineOutput est une chaîne = RegexRemplace(sChaineInput, "[^\d]{1,}", "")
Trace(sChaineOutput)
Posté le 28 novembre 2025 - 20:06
Benjamin a écrit :
sMaChaineDeTest est une chaîne = "Chaîne avec des chiffres 0123, des accents, des MAJUCULE et des caractères spéciaux 45+/:_<67>$-89"

trace(SansCaractère(ChaîneFormate(sMaChaineDeTest, ccMinuscule+ccSansAccent+ccSansPonctuationNiEspace), "abcdefghijklmnopqrstuvwxyz", sscTout))

//Affiche : 0123456789


Merci