Perl : expressions régulières
Résolu
deniss92
Messages postés
39
Date d'inscription
Statut
Membre
Dernière intervention
-
deniss92 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
deniss92 Messages postés 39 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à mettre en place un script sous Perl qui converti le 1er caractère du 1er mot (non numérique) et le 1er caractère du dernier mot en majuscule, dans le champ adresse.
Voici le fichier source :
9999999999N;33000128;TERRIEUR;ALAIN;13 rue thibault chabrand;95240;CORMEILLES EN PARISIS;FRANCE
1234567891Z;44150912;TERRIEUR;ALEX;10 RUE CHARLE DROT;92500;RUEIL MALMAISON;FRANCE
1987654321F;00000178;PEUPLU;JEAN;15 rue bernard de jussieu;92600;ASNIERES SUR SEINE;FRANCE
1357911134G;00000180;OPERA;CHANTAL;25 Rue de la Marne;78800;HOUILLES;FRANCE
le script actuel est le suivant ;
#!/usr/bin/perl
#
# script maj.pl
use POSIX qw(locale_h);
$old_locale = setlocale(LC_CTYPE);
setlocale(LC_CTYPE, "fr_FR.ISO8859-1");
$delimited_in = ';';
$delimited_out = "\t";
use locale;
while (<>)
{
($ine , $id , @tab) = split /$delimited_in/;
$tab[0] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne nom du tableau en majuscule.
$tab[1] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne prenom du tableau en majuscule.
$tab[2] =~ s/(\pL+)/\u\L$1/g;
#$tab[2] =~ s/^\D+\S(\w+)/\u\L$1/g;
print join $delimited_out, ($id , $ine , @tab) ;
}
setlocale(LC_CTYPE, $old_locale);
Le problème est que le script converti en majuscule le 1er caractère de chaque mot du champ adresse. Et je n'ai pas encore trouvé la bonne syntaxe.
Si quelqu'un a une idée, ce serait vraiment sympa.
Merci d'avance
Je cherche à mettre en place un script sous Perl qui converti le 1er caractère du 1er mot (non numérique) et le 1er caractère du dernier mot en majuscule, dans le champ adresse.
Voici le fichier source :
9999999999N;33000128;TERRIEUR;ALAIN;13 rue thibault chabrand;95240;CORMEILLES EN PARISIS;FRANCE
1234567891Z;44150912;TERRIEUR;ALEX;10 RUE CHARLE DROT;92500;RUEIL MALMAISON;FRANCE
1987654321F;00000178;PEUPLU;JEAN;15 rue bernard de jussieu;92600;ASNIERES SUR SEINE;FRANCE
1357911134G;00000180;OPERA;CHANTAL;25 Rue de la Marne;78800;HOUILLES;FRANCE
le script actuel est le suivant ;
#!/usr/bin/perl
#
# script maj.pl
use POSIX qw(locale_h);
$old_locale = setlocale(LC_CTYPE);
setlocale(LC_CTYPE, "fr_FR.ISO8859-1");
$delimited_in = ';';
$delimited_out = "\t";
use locale;
while (<>)
{
($ine , $id , @tab) = split /$delimited_in/;
$tab[0] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne nom du tableau en majuscule.
$tab[1] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne prenom du tableau en majuscule.
$tab[2] =~ s/(\pL+)/\u\L$1/g;
#$tab[2] =~ s/^\D+\S(\w+)/\u\L$1/g;
print join $delimited_out, ($id , $ine , @tab) ;
}
setlocale(LC_CTYPE, $old_locale);
Le problème est que le script converti en majuscule le 1er caractère de chaque mot du champ adresse. Et je n'ai pas encore trouvé la bonne syntaxe.
Si quelqu'un a une idée, ce serait vraiment sympa.
Merci d'avance
A voir également:
- Perl : expressions régulières
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- DzSoft Perl Editor - Télécharger - Édition & Programmation
- Comment lire un fichier .pl perl ? - Forum Windows
- Perl: transformer un fichier en package ✓ - Forum Perl
3 réponses
Salut,
Une autre façon de le faire
Une autre façon de le faire
#!/usr/bin/perl while(<>){ s/^ # ancrage début chaine ([^;]*); # le 1er champ numérique ([^;]*); # le deuxième (\w)([^;]*); # le nom (\w)([^;]*); # le prénom (\d+)\s+(\w)([^;]*) # l'adresse \s(\w+); # 1er mot de la rue ([^;]*); # le code postal ([^;]*); # la ville ([^;]*) # le pays /$1 $2 \u$3\L$4\E \U$5\L$6\E $7 \u$8\L$9\E \u\L$10\E $11 $12 $13/x; print; }Résultat
lami20j@debian:~/trash$ perl ccm0.pl deniss92 9999999999N 33000128 Terrieur Alain 13 Rue thibault Chabrand 95240 CORMEILLES EN PARISIS FRANCE 1234567891Z 44150912 Terrieur Alex 10 Rue charle Drot 92500 RUEIL MALMAISON FRANCE 1987654321F 00000178 Peuplu Jean 15 Rue bernard de Jussieu 92600 ASNIERES SUR SEINE FRANCE 1357911134G 00000180 Opera Chantal 25 Rue de la Marne 78800 HOUILLES FRANCE
Bonjour,
J'avais laisser un peu de côté ce script. Voilà le script que j'ai finalement mis en place. Toutefois, on peut faire mieux.
#!/usr/bin/perl
#
# script maj.pl
use POSIX qw(locale_h);
$old_locale = setlocale(LC_CTYPE);
setlocale(LC_CTYPE, "fr_FR.ISO8859-1");
$delimited_in = ';';
$delimited_out = "\t";
use locale;
while (<>)
{
($ine , $id , @tab) = split /$delimited_in/;
$tab[0] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne nom du tableau en majuscule.
$tab[1] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne prenom du tableau en majuscule.
($num,$prem,@tab2)=split(/ /,lc($tab[2]));## Absorption numéro, rue et le reste en tableau=> le tout en minuscule
$prem=~s/(\w+)/\u\L$1/g;## convertion du premier caractère de la rue en majuscule
$end=pop(@tab2);## extraction du dernier mot du tableau
$end=~s/(\w+)/\u\L$1/g;## convervion du premier caractère de la ville en majuscule
$tab[2]=join ' ',($num,$prem,@tab2,$end);## affectation de l'ensemble dans tab2[]
print join $delimited_out, ($id , $ine , @tab) ;
}
setlocale(LC_CTYPE, $old_locale);
--------------------------------------------------------
Résultat
33000128 9999999999N Terrieur Alain 13 Rue thibault Chabrand 95240 CORMEILLES EN PARISIS FRANCE
44150912 1234567891Z Terrieur Alex 10 Rue charle Drot 92500 RUEIL MALMAISON FRANCE
00000178 1987654321F Peuplu Jean 15 Rue bernard de Jussieu 92600 ASNIERES SUR SEINE FRANCE
00000180 1357911134G Opera Chantal 25 Rue de la Marne 78800 HOUILLES FRANCE
J'avais laisser un peu de côté ce script. Voilà le script que j'ai finalement mis en place. Toutefois, on peut faire mieux.
#!/usr/bin/perl
#
# script maj.pl
use POSIX qw(locale_h);
$old_locale = setlocale(LC_CTYPE);
setlocale(LC_CTYPE, "fr_FR.ISO8859-1");
$delimited_in = ';';
$delimited_out = "\t";
use locale;
while (<>)
{
($ine , $id , @tab) = split /$delimited_in/;
$tab[0] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne nom du tableau en majuscule.
$tab[1] =~ s/(\w+)/\u\L$1/g; ### 1ère lettre de la colonne prenom du tableau en majuscule.
($num,$prem,@tab2)=split(/ /,lc($tab[2]));## Absorption numéro, rue et le reste en tableau=> le tout en minuscule
$prem=~s/(\w+)/\u\L$1/g;## convertion du premier caractère de la rue en majuscule
$end=pop(@tab2);## extraction du dernier mot du tableau
$end=~s/(\w+)/\u\L$1/g;## convervion du premier caractère de la ville en majuscule
$tab[2]=join ' ',($num,$prem,@tab2,$end);## affectation de l'ensemble dans tab2[]
print join $delimited_out, ($id , $ine , @tab) ;
}
setlocale(LC_CTYPE, $old_locale);
--------------------------------------------------------
Résultat
33000128 9999999999N Terrieur Alain 13 Rue thibault Chabrand 95240 CORMEILLES EN PARISIS FRANCE
44150912 1234567891Z Terrieur Alex 10 Rue charle Drot 92500 RUEIL MALMAISON FRANCE
00000178 1987654321F Peuplu Jean 15 Rue bernard de Jussieu 92600 ASNIERES SUR SEINE FRANCE
00000180 1357911134G Opera Chantal 25 Rue de la Marne 78800 HOUILLES FRANCE