Utlisation AWK
rondin
Messages postés
3
Statut
Membre
-
rondin Messages postés 3 Statut Membre -
rondin Messages postés 3 Statut Membre -
Bonjour,
J'utilise AWK pour extraire dans un fichier d'adresse : exp
34 allée GIACOMETTI
le numéro de rue éventuellement bis /ter.
avec split et substr.
de façon à avoir le format N° de rue, bis/ter, adresse. dans des champs séparés par des virgules
Cela fonctionne, sauf dans le cas d'une adresse comportant une lettre accentuée (voir exemple).
J'utilise linux mdv 2007 powerpack. Est-ce un problème de "charset"? il me semble avoir vu dans un forum qu'il faut utiliser charset=iso 8852-1??? si oui il n'est pas fourni, comment le récupérer et l'intaller.
Merci de l'aide Cordialement rondin
J'utilise AWK pour extraire dans un fichier d'adresse : exp
34 allée GIACOMETTI
le numéro de rue éventuellement bis /ter.
avec split et substr.
de façon à avoir le format N° de rue, bis/ter, adresse. dans des champs séparés par des virgules
Cela fonctionne, sauf dans le cas d'une adresse comportant une lettre accentuée (voir exemple).
J'utilise linux mdv 2007 powerpack. Est-ce un problème de "charset"? il me semble avoir vu dans un forum qu'il faut utiliser charset=iso 8852-1??? si oui il n'est pas fourni, comment le récupérer et l'intaller.
Merci de l'aide Cordialement rondin
4 réponses
Salut,
C'est bizarre ça ;-\
Tu peux nous afficher la ligne de commande awk que tu emploies s'il te plaît.
C'est bizarre ça ;-\
Tu peux nous afficher la ligne de commande awk que tu emploies s'il te plaît.
Pas de problème voici le shell en partie :
# extraction N� rue - B/T - champ rue
gawk '{ FS=","
if (NR == 1) {entete=$0;print entete >> "ficabst"}
if (NR >= 2) {
chp1=$1;chp2=$2;chp3=$3;chp4=$4;chp5=$5;chp6=$6;chp7=$7;chp8=$8;chp9=$9
# calcul du nb de car de chp8
nbc=length(chp8);print " nbc: "nbc" chp8 :"chp8
SEP=" ";x=split(chp8,array,SEP);num=array[1];z=length(num);print " z: "z" x :"x;z=z+2
# N� de rue existe ? - test de num ..
if (num >= "1" && num <= "999") {
ecrit=0;adr=substr(chp8,z);print " z1: "z" nbc1 :"nbc" adr :"adr
print chp1","chp2","chp3","chp4","chp5","chp6","chp7","num","adr >> "ficabst1" }}
# print " num :"num" adr :" adr" NR :"NR" chp8 :"chp8
# Test nb car de y
et la trace du traitement(cas adresse avec accent):
nbc: 5 chp8 :1 all�e GIACOMETTI
z: 1 x :3
z1: 3 nbc1 :5 adr :all
et la trace du traitement(cas adresse sans accent):
nbc: 19 chp8 :10 allee GIACOMETTI
z: 2 x :3
z1: 4 nbc1 :19 adr :allee GIACOMETTI
Merci de l'aide
# extraction N� rue - B/T - champ rue
gawk '{ FS=","
if (NR == 1) {entete=$0;print entete >> "ficabst"}
if (NR >= 2) {
chp1=$1;chp2=$2;chp3=$3;chp4=$4;chp5=$5;chp6=$6;chp7=$7;chp8=$8;chp9=$9
# calcul du nb de car de chp8
nbc=length(chp8);print " nbc: "nbc" chp8 :"chp8
SEP=" ";x=split(chp8,array,SEP);num=array[1];z=length(num);print " z: "z" x :"x;z=z+2
# N� de rue existe ? - test de num ..
if (num >= "1" && num <= "999") {
ecrit=0;adr=substr(chp8,z);print " z1: "z" nbc1 :"nbc" adr :"adr
print chp1","chp2","chp3","chp4","chp5","chp6","chp7","num","adr >> "ficabst1" }}
# print " num :"num" adr :" adr" NR :"NR" chp8 :"chp8
# Test nb car de y
et la trace du traitement(cas adresse avec accent):
nbc: 5 chp8 :1 all�e GIACOMETTI
z: 1 x :3
z1: 3 nbc1 :5 adr :all
et la trace du traitement(cas adresse sans accent):
nbc: 19 chp8 :10 allee GIACOMETTI
z: 2 x :3
z1: 4 nbc1 :19 adr :allee GIACOMETTI
Merci de l'aide
Effectivement tu as l'air d'avoir des soucis avec tes "locale".
Regarde voir déjà ce que te renvoie la commande :
Ensuite et sans aucune conviction essaie de rajouter à ton programme "awk" en début de programme l'instruction :
Regarde voir déjà ce que te renvoie la commande :
localesur ton système.
Ensuite et sans aucune conviction essaie de rajouter à ton programme "awk" en début de programme l'instruction :
LC_ALL=fr_FR;-))
D'abord merci de l'intérêt porté à mon problème.
Voici le CR de la commade "locale":
$ locale
LANG=fr_FR.UTF-8
LC_CTYPE=fr_FR.UTF-8
LC_NUMERIC=fr_FR.UTF-8
LC_TIME=fr_FR.UTF-8
LC_COLLATE=fr_FR.UTF-8
LC_MONETARY=fr_FR.UTF-8
LC_MESSAGES=fr_FR.UTF-8
LC_PAPER=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LC_ADDRESS=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_ALL=
J'ai rajouté l'instruction préconisée mais hélas çà ne change rien. Cordialement
Voici le CR de la commade "locale":
$ locale
LANG=fr_FR.UTF-8
LC_CTYPE=fr_FR.UTF-8
LC_NUMERIC=fr_FR.UTF-8
LC_TIME=fr_FR.UTF-8
LC_COLLATE=fr_FR.UTF-8
LC_MONETARY=fr_FR.UTF-8
LC_MESSAGES=fr_FR.UTF-8
LC_PAPER=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LC_ADDRESS=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_ALL=
J'ai rajouté l'instruction préconisée mais hélas çà ne change rien. Cordialement