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

Résolu/Fermé
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 2 sept. 2019 à 17:25
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 1 oct. 2019 à 16:47
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 sept. 2019 à 14:45
$ 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 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
Modifié le 1 oct. 2019 à 09:53
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié le 1 oct. 2019 à 11:59
$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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
1 oct. 2019 à 12:15
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié le 1 oct. 2019 à 12:56
$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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
1 oct. 2019 à 13:12
Oups, j'avais omis cette condition, shame on me ;-[
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
2 sept. 2019 à 17:37
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 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
Modifié le 3 sept. 2019 à 14:04
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024
3 sept. 2019 à 16:22
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 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
3 sept. 2019 à 16:54
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024
3 sept. 2019 à 17:10
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 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
3 sept. 2019 à 17:30
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 sept. 2019 à 13:00
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 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
3 sept. 2019 à 14:03
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