Rajout d'un préfixe sur numéro de téléphone [Résolu]

Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
- - Dernière réponse : JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
- 5 sept. 2019 à 12:06
Bonjour,

Je souhaiterai par un post-traitement pouvoir rajouter l'indicatif français à des numéros de téléphone.
j'ai un fichier plat du genre :

AAAAA;BBBBBB;CCCCCC;0601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;0601155204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;00268601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+268601030204;DDDDD;EEEEE

Et je souhaite avoir cela :

AAAAA;BBBBBB;CCCCCC;+33601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+33601155204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;00268601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+268601030204;DDDDD;EEEEE

Donc pas de substitution si un indicatif est déjà présent sur le numéro ( numéro commençant par "00" ou "+") sinon on remplace le premier zéro par "+33".
J'ai déjà un script de post-traitement (suppression des espaces non significatifs via un sed)

Merci pour votre aide car je ne maîtrise vraiment pas le sujet.

Configuration: Windows / Chrome 76.0.3809.132
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
17821
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
11 septembre 2019
4448
1
Merci
$ awk 'BEGIN {FS=OFS=";"} $18 !~ /^'\''(+|00)/ {sub("0", "+33", $18)} {print $0}'  fichier2
'0449003021';'00000162';'00000162';'BOBO';;'TOTO';'bobo.toto@free.fr';;;'1970-01-20';'06 RUE ALMODIS';;;'02880';'SOISSONS';'FR';;'+33657087624';;;;;'FR';'2005-08-28';;;;;;;;;;;;;;;;;;'ATE';'078';'DERTIS AERO';'078021';'DERTIS AERO. BLAG';'NON CADRE';

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 60246 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dubcek
Messages postés
36964
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 septembre 2019
3980
0
Merci
Salut,

Sous réserve qu'il n'existe aucun autre champs commençant par un zéro suivi d'un chiffre entre 1 et 9…

sed 's/;0\([1-9]\)/;+33\1/' 
devrait le faire ;-)

JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
-
Ok super Zip31, merci pour ton aide. Je vais regarder la solution de dubcek dans ce cas si sa solution est plus sur.
Merci encore ;-)
zipe31
Messages postés
36964
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 septembre 2019
3980 > JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
-
Re-

Si tu tiens absolument à le faire via "sed", voici une solution plus qu'indigeste ;-))

sed "s/\(\([^;]*;\)\{15\}\)'0\([1-9][0-9]\{8\}\)/\1'+33\3/"
JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
-
Bonjour Zipe31,

Je vais essayer car en même temps tant que ça fonctionne moi ça me va ;-)
les côtes ne pause pas de problèmes dans ton code ?

Merci encore.
zipe31
Messages postés
36964
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 septembre 2019
3980 > JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
-
les côtes ne pause pas de problèmes dans ton code ?
Non, dans la mesure où on emploie des "quotes doubles" autour de la commande principale.
C'est d'ailleurs pourquoi je les ai employées ici, afin d'éviter les soucis causés par les échappements avec des antislashs ;-\
JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
-
ok, bha au moins j'aurai appris cela !!
Dans tous les cas, les deux solutions fonctionnent donc encore une fois, je vous remercie tous pour votre aide et votre disponibilité.

Merci !!!
Commenter la réponse de zipe31
Messages postés
17821
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
11 septembre 2019
4448
0
Merci
hello
$ awk 'BEGIN {FS=OFS=";"} $4 !~ /^(+|00)/ {sub("0", "+33", $4)} {print $0}'  fichier
AAAAA;BBBBBB;CCCCCC;+33601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+33601155204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;00268601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+268601030204;DDDDD;EEEEE
JsuisNul
Messages postés
96
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
5 septembre 2019
-
Merci Dubcek,

Merci pour ta solution, comme dit plus haut la réponse de Zip31 me convient mieux car plus facile à rajouter dans mon script mais en fonction de la réponse de Zip31 j'utiliserai quand même ta solution si besoin.

Merci dans tout les cas ;-)
Commenter la réponse de dubcek