[R]formater un numéro de téléphone

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

[R]formater un numéro de téléphone

#1

Message par corrs78 »

Bonjour,

je souhaite reformater un numéro de téléphone pour respercter une politique de nommage bien précise.
Dans le but de faire ça le plus "intelligemment" possible je vous sollicite.

le numéro de tel d'origine est formaté ainsi : 0199887766
l'objectif est d'obtenir un numéro de téléphone de ce format : +33 1 99 88 77 66

Voici ma solution, qui je pense est loin d'être optimale, même si cela fonctionne.

Code : Tout sélectionner

$tel = "0130405060"

$var  = StringTrimLeft($tel,2)
Local $tel1 = StringMid($var, 1,2)
Local $tel2 = StringMid($var, 3,2)
Local $tel3 = StringMid($var, 5,2)
Local $tel4 = StringMid($var, 7,2)

$tel_reformate = "+33 1 "&$tel1&" "&$tel2&" "&$tel3&" "&$tel4
ConsoleWrite($tel_reformate)
Bien cordialement.
Modifié en dernier par corrs78 le ven. 23 févr. 2018 14:59, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..]formater un numéro de téléphone

#2

Message par walkson »

Bonjour,
#include <Array.au3>
$tel = "0130405060"
$regex = "[0-9]{2}" ;de 0 à 9 par groupe de 2
$string = StringRegExp($tel, $regex, 3)
_ArrayDisplay($string)
$telFormat = StringFormat("+33 %1i %2i %2i %2i %2i", $string[0], $string[1], $string[2], $string[3], $string[4] )
ConsoleWrite(">>>  " & $telFormat & @CR)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]formater un numéro de téléphone

#3

Message par corrs78 »

Merci Walkson, je me doutais bien que c'etait plus "judicieux" de traiter cela avec une RegExp.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]formater un numéro de téléphone

#4

Message par mikell »

@walkson
Pour le fun :mrgreen:

$tel = "0130405060"
Msgbox(0,"", "+33 " & StringRegExpReplace(Number($tel), '(?=(..)+$)', " ") )
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..]formater un numéro de téléphone

#5

Message par walkson »

Image

J'ai eu du mal à comprendre comment tu passais de 01 à 1 avant d'avoir vu Number($tel) (c'est de la triche ! :lol: )
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [..]formater un numéro de téléphone

#6

Message par corrs78 »

en effet jolie feinte,
merci à tous, je serais moins bête ce soir en me couchant (meme si j'ai toujours du mal avec les expressions régulières :oops: )
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..]formater un numéro de téléphone

#7

Message par mikell »

walkson a écrit : ven. 23 févr. 2018 14:56J'ai eu du mal à comprendre comment tu passais de 01 à 1 avant d'avoir vu Number($tel) (c'est de la triche ! :lol: )
Meuh non, c'est un raccourci :mrgreen:
Mais note qu'avec cette méthode, si un jour les préfixes > 09 existent, mon petit code marchera encore :P
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [R]formater un numéro de téléphone

#8

Message par orax »

corrs78 a écrit : ven. 23 févr. 2018 14:58[...] (meme si j'ai toujours du mal avec les expressions régulières :oops: )
Avec cet exemple ci-dessous, c'est plus simpliste, mais c'est peut-être aussi plus facile à comprendre :

Code : Tout sélectionner

MsgBox(0, "", StringRegExpReplace("0130405060", "0(\d)(\d\d)(\d\d)(\d\d)(\d\d)", "+33 \1 \2 \3 \4 \5"))
\d = [0-9]
Et au lieu de \d\d j'aurais pu écrire \d{2}.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [R]formater un numéro de téléphone

#9

Message par corrs78 »

Finalement j'ai du reprendre la solution de Mikell, car la regexp de Walkson (ci dessous) ne marchait pas dans un cas précis

Code : Tout sélectionner

$string = StringRegExp([0-9]{2}, $regex, 3)
$telFormat = StringFormat("+33 %1i %2i %2i %2i %2i", $string[0], $string[1], $string[2], $string[3], $string[4] )
j'avais un numéro de ce genre : 0203042005

et au final il me manquait un zéro à la fin : +33 2 03 04 20 5
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R]formater un numéro de téléphone

#10

Message par mikell »

La regex de walkson marche, c'est le StringFormat qui était à adapter
"If the number of characters in the output value is less than the specified width, blanks are added to the left or the right of the values (...) until the minimum width is reached. If width is prefixed with 0, zeros are added until the minimum width is reached "
So :
$telFormat = StringFormat("+33 %1i %02i %02i %02i %02i", $string[0], $string[1], $string[2], $string[3], $string[4] )
Image

NB: dans mon code Number() n'est pas vraiment une feinte. ça fait sauter le "0" initial, et ça marche parce que le préfixe 00 n'existe pas :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R]formater un numéro de téléphone

#11

Message par Tlem »

Bon je sais qui fait pas encore assez chaud, mais pour celles (et ceux) qui préfèrent les strings ... :lol:

Code : Tout sélectionner

$tel = "0130405060"
MsgBox(0, "Tel formaté", "+33 " & StringMid($tel, 2, 1) & " " & StringMid($tel, 3, 2) & " " & StringMid($tel, 5, 2) & " " & StringMid($tel, 7, 2)& " " & StringMid($tel, 9, 2))
Bon, c'est la même chose que le premier message de corrs78 mais en simplifié. ^^

Après, il y a pire :

Code : Tout sélectionner

$t = StringSplit("0130405060", "")
MsgBox(0, "Tel formaté", "+33 " & $t[2] & " " & $t[3] & $t[4] & " " & $t[5] & $t[6] & " " & $t[7] & $t[8] & " " & $t[9] & $t[10])
Bonne nuit. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre