Extraire (ou garder) uniquement valeur numérique d'une chaine [Résolu]

Zacaoa 48 Messages postés mardi 19 janvier 2010Date d'inscription 20 avril 2012 Dernière intervention - 18 avril 2012 à 22:07 - Dernière réponse : Zacaoa 48 Messages postés mardi 19 janvier 2010Date d'inscription 20 avril 2012 Dernière intervention
- 20 avril 2012 à 10:42
Bonsoir à tous,

J'ai une petite question.
J'ai un programme en cours en VB6 qui extrait d'une base de donnée sous AS400 diverses informations.
L'une d'elle étant des numéros de téléphone ainsi que des numéros de fax. Comment peut-on faire pour qu'une chaîne comme 03.86.00.00.00 ou 03/86/00/00/00 soit transformer en 0386000000?
En gros depuis quelques temps je cherche comment ne prendre (ou garder) uniquement que les valeurs numériques d'une chaîne de caractères en VB6...

Merci d'avance pour les idées

++
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 avril 2012 à 22:22
3
Merci
Bonjour,
Tu as le choix entre :
1) simple : utiliser la fonction Replace (à lire dans ton aide VB6). Valable uniquement si les caractères à supprimer sont toujours les mêmes
ou
2) moins simple, mais également facile : parcourir en boucle les caractères de la chaîne (boucle à l'aide de la fonction Mid) et ne garder que ceux qui sont numériques (Isnumeric)

A bûcher donc (ton aide VB6 sur ta machine) :
Replace
For ... to ... next
Mid
Len

Mets-toi à ce petit travail. Reviens avec ton code d'essai si encore en difficulté.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 avril 2012 à 10:04
3
Merci
Bien en ce qui concerne la boucle, mais plus orthodoxe (avec cette méthode) en écrivant :
If isnumeric(CarLecture) Then
au lieu de
If CarLecture >= "0" And CarLecture <= "9" Then
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
Utilisateur anonyme - 19 avril 2012 à 03:04
0
Merci
Bonjour,

Une troisième méthode:

1) prendre la chaîne caractère du numéro

2) Fractionner le numéro avec la fonction Split()

3) parcourir le tableau obtenu avec la fonction et concaténer les différentes valeurs

Une quatrième méthode

Utiliser les expressions régulières...

Mais bon, ce sont des remèdes de cheval et probablement pas les plus efficaces. (À moins que Renfield ne vienne me contredire )

Fini le cabotinage pour ce soir...
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 avril 2012 à 08:12
0
Merci
Bonjour, cmarcotte,
La plus efficace/rapide ? ===>> je l'ai tue car il n'en est qu'à ses débuts ===>> utilisation de strconv , isnumeric et join. Celle-là permettrait même l'extraction des chiffres dans une chaine contenant des chiffres et d'autres choses (même si différentes entre elles).
Regarde ==>>
toto = "03/86.0\2-20#33"
titi = Split(StrConv(toto, vbUnicode), Chr(0))
For i = 0 To UBound(titi)
  If Not IsNumeric(titi(i)) Then titi(i) = ""
Next
MsgBox Join(titi, "")


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 avril 2012 à 08:41
0
Merci
Je viens de l'essayer en boucle === >>> 100 000 chaînes traitées en moins de 1 seconde.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Zacaoa 48 Messages postés mardi 19 janvier 2010Date d'inscription 20 avril 2012 Dernière intervention - 20 avril 2012 à 09:54
0
Merci
Merci à vous pour vos réponse, je m'en suis sorti en faisant comme ceci

For i = 1 To Len(CharTemp)
CarLecture = Mid(CharTemp, i, 1)
If CarLecture >= "0" And CarLecture <= "9" Then
Data(iLigne, 11) = Data(iLigne, 11) & CarLecture
End If
Next

Je ne sais pas si c'est le plus fonctionnel, mais j'ai voulu faire le plus simple possible.

Encore merci à vous

++
Commenter la réponse de Zacaoa
Zacaoa 48 Messages postés mardi 19 janvier 2010Date d'inscription 20 avril 2012 Dernière intervention - 20 avril 2012 à 10:42
0
Merci
Je note!

Tous les conseils sont bons à prendre!

Encore merci ucfoutu +
Commenter la réponse de Zacaoa

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.