Rajout d'un préfixe sur numéro de téléphone

Résolu
JsuisNul Messages postés 137 Statut Membre -  
JsuisNul Messages postés 137 Statut Membre -
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
A voir également:

3 réponses

dubcek Messages postés 19021 Statut Contributeur 5 637
 
$ 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';
2
JsuisNul Messages postés 137 Statut Membre 1
 
Re-bonjour les amis,

Je reviens vers vous car je viens de remarquer qu'il y a des cas ou ça ne fonctionne pas correctement :

j'ai des résultats comme suit :

+33664450205 => +3366445+33205
+33609687332 => +336+339687332
+33684453033 => +33684453+3333

En gros j'ai un pb avec les numéros qui sont déjà au format international

Je remets la ligne de commande tels que je l'ai écris:

awk 'BEGIN {FS=OFS=";"} $18 !~ /^(+|00)/ {sub("0", "+33", $18)} {print $0}' Fic1 > Fic2

Quelqu'un peut il m'aider svp car il me semble que la substitution ne doit se faire qu'en début de champ ?

Merci d'avance.
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
$18 !~ /^(+|00)/ on teste que le champ 18 ne commence ni par un + ni par 00
y a-t-il des espaces au début ?
montre des données
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > dubcek Messages postés 19021 Statut Contributeur
 
Salut dubcek,

En fait il faudrait une condition supplémentaire à ta syntaxe qui vérifie juste que le "0" à remplacer par "+33" soit bien en début de champ et pas ailleurs.

Avec l'exemple donné, on voit bien qu'il remplace tous les zéros rencontrés parce que le champ commence par un "+", ce qui valide bien la condition (
/^(+|00)/ 
);-(

+33664450205 => +3366445+33205
+33609687332 => +336+339687332
+33684453033 => +33684453+3333
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
$18 !~ qui ne commence pas par ...
en remplaçant $18 par $4,ca traite correctement les données du post #1
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > dubcek Messages postés 19021 Statut Contributeur
 
Oups, j'avais omis cette condition, shame on me ;-[
0
zipe31 Messages postés 38797 Statut Contributeur 6 433
 
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 ;-)

0
JsuisNul Messages postés 137 Statut Membre 1
 
Merci Zip31,

Ta solution me convient bien car plus simple à intégrer le script existant mais j'ai d'autre champs pouvant commencer par un zéro.
Comme pour la réponse de Dubcek ci-dessous, est il possible de préciser le champ impacté ?

Merci d'avance.
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > JsuisNul Messages postés 137 Statut Membre
 
mais j'ai d'autre champs pouvant commencer par un zéro.
Avant ou après ?
Affiche-nous un exemple plus précis (même si ce n'est pas les vraies données, fait en sorte qu'on soit proche de la réalité).
0
JsuisNul Messages postés 137 Statut Membre 1
 
Ok. Ci-joint une ligne du fichier.
Le numéro de tel est dans le champ 18.
En gras tout les champs pouvant commencé par un zéro. Je ne l'avais pas préciser mais tous les champs sont bornés avec des simples cotes.

'0449003021';'00000162';'00000162';'BOBO';;'TOTO';'bobo.toto@free.fr';;;'1970-01-20';'06 RUE ALMODIS';;;'02880';'SOISSONS';'FR';;'0657087624';;;;;'FR';'2005-08-28';;;;;;;;;;;;;;;;;;'ATE';'078';'DERTIS AERO';'078021';'DERTIS AERO. BLAG';'NON CADRE';

Merci Zipe31
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > JsuisNul Messages postés 137 Statut Membre
 
Toujours sous réserve qu'aucun autre champs ne ressemble à un numéro de téléphone (comme le champ 1 par exemple) ;-\

sed "s/'0\([1-9][0-9]\{8\}\)/'+33\1/2"


À savoir le numéro de champs, la solution de dubcek me paraît beaucoup plus appropriée ;-)
0
JsuisNul Messages postés 137 Statut Membre 1
 
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 ;-)
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
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
0
JsuisNul Messages postés 137 Statut Membre 1
 
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 ;-)
0