|
| 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 412 messages |
|
| Posté le 06 novembre 2013 - 12:45 |
| |
| |
| | | |
|
| | |
| |
| 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")) Trace(Gs_ExtraitChiffres("Salut tout le monde !")) Trace(Gs_ExtraitChiffres("42")) Trace(Gs_ExtraitChiffres("WebDev 12 et WinDev 15")) |
| |
| |
| | | |
|
| | |
| |
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 MonRegexp>>Pattern = "[^\d]" sTexte = "F00045" Trace(MonRegexp>>Replace(sTexte,"")) 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 |
| |
| |
| | | |
|
| | | | |
| | |
|