Programmation Perl/Chaînes de caractères
Apparence
Le langage Perl permet de gérer les chaînes de caractères.
Comme il s'agit d'une langage ancien, il a d'abord été conçu pour gérer les anciens codages de textes (ASCII, iso-8859-x, etc.).
Le langage Perl s'adapte tout de même à son époque, et il est en particulier possible de traiter des textes Unicode. Si vous ne connaissez pas Unicode, vous pouvez le découvrir avec le livre À la découverte d'Unicode.
Des pages de manuels de Perl sont dédiées à l'Unicode, comme perlunicode ou perluniintro.
Fonctions de manipulation des chaînes
[modifier | modifier le wikicode]- substr
- Extrait une sous-chaîne.
#!/usr/bin/perl
use strict;
use warnings;
my $chaine="babebibobu";
# extraction
print substr($chaine,4,2)."\n"; # bi
# extraction du 5e à l'antépénultième
$chaine="babebibobu";
print substr($chaine,4,-2)."\n"; # bibo
# comptage depuis la fin
$chaine="babebibobu";
print substr($chaine,-7,2)."\n"; # eb
#
# jusqu‘à l'avant-dernier
$chaine="babebibobu";
print substr($chaine,-7,-1)."\n"; # ebibob
# remplacement de 4 caractères par XX
$chaine="babebibobu";
substr($chaine,2,4,"XX");
print $chaine."\n"; # baXXbobu
# gommage = remplacement vide
$chaine="babebibobu";
substr($chaine,2,2,"");
print $chaine."\n"; # babibobu
# incrustation = remplacement sur une longueur de zéro
$chaine="babebibobu";
substr($chaine,4,0,"YY");
print $chaine."\n"; # babeYYbibobu
# préfixage
$chaine="babebibobu";
substr($chaine,0,0,"PREF_");
print $chaine."\n"; # PREF_babebibobu
# suffixage
$chaine="babebibobu";
substr($chaine,length $chaine,0,"_SUFF");
print $chaine."\n"; # babebibobu_SUFF
###########################
# autre syntaxe
# remplacement
$chaine="babebibobu";
substr($chaine,2,3)="XX";
print $chaine."\n"; # baXXibobu
# incrustation
$chaine="babebibobu";
substr($chaine,6,0)="YY";
print $chaine."\n"; # babebiYYbobu
# gommage
$chaine="babebibobu";
substr($chaine,2,6)="";
print $chaine."\n"; # babu
# préfixage
$chaine="babebibobu";
substr($chaine,0,0)="PREF_";
print $chaine."\n"; # PREF_babebibobu
# suffixage
$chaine="babebibobu";
substr($chaine,length $chaine,0)="_SUFF";
print $chaine."\n"; # babebibobu_SUFF
- length
- Calcule la longueur d'une chaîne.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;
my $chaine="babebibobu";
print length $chaine; # 10
print "\n";
# lettres accentuées du français = 2 octets
my $chaine2="àâéèêëîïôùûçœæ";
print length $chaine2; # 28
print "\n";
# caractères spéciaux
print length "\t"; # 1 = UNE tabulation
print "\n";
print length "\\\n"; # 2 = une \ littéralement + un retour de chariot
print "\n";
# accepte toute chaîne quel que soit l‘emberlificotage de fonctions qui la crèe.
print length "devant".substr($chaine,-7,-1)x 3 ."derrière\n".sprintf ("%.5f",6/7) ; # 41 dont devant = 6 ; eBIboB x 3 = 18 ; derrière\n = 10 (è = 2) ; 0.85714 = 7 caractères
print "\n";
- lc
- Transforme une chaîne en minuscules.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;
my $chaine="BaBeBiBOBU";
print lc "$chaine.\n"; # babebibobu
my $chaine2="fichier.TXT";
print ucfirst substr( $chaine2,0,-4). lc substr( $chaine2,-4,4)."\n" ;# Fichier.txt
- uc
- Transforme une chaîne en majuscules.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;
my $chaine="BaBeBiBOBU";
print uc $chaine."\n"; # BABEBIBOBU
- lcfirst
- Transforme le premier caractère d'une chaîne en minuscule.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;
my $chaine2="Cornélien";
print lcfirst $chaine2."\n"; # cornélien
- ucfirst
- Transforme le premier caractère d'une chaîne en majuscule.
#!/usr/bin/perl -w
# -w = "use warnings;"
use strict;
my $chaine="corneille";
print ucfirst $chaine."\n"; # Corneille
my $chaine2="corneille, (auteur du cid.)";
print ucfirst substr( $chaine2,0,-5). ucfirst substr( $chaine2,-5,5)."\n" ; # Corneille, (auteur du Cid.)
- chop
- Supprime le dernier caractère d'une chaîne.
Il est utilisé surtout pour effacer les \n ("entrées" ou Carriage Return).
#!/usr/bin/perl -w
use strict;
# chop efface le dernier caractère de chaque item d'un liste
my @tableau = ( "a\n" , "b\n", "c\n" );
print @tableau; # a b c sur 3 lignes distinctes
chop @tableau;
print @tableau; # abc accolés : les \n ont disparu
print "\n";
# chop renvoie son dernier effacement
my @tableau2 = ( "vaches" , "veaux" );
print chop @tableau2;# le x de "veaux"
print "\n";
print @tableau2;# vacheveau
print "\n";
- chomp
- Permet de supprimer plusieurs caractères à la fin d'un chaîne.
#!/usr/bin/perl -w
use strict;
# création d‘un fichier cobaye de 3 lignes
# Descripteur de fichier = File Handle
open ( Descr0,'>','./cobaye') or die ("écriture impossible $!");
print Descr0 "premier\ndeuxieme\ntroisieme\n";
close(Descr0);
# lecture sans chomp -> affichage des 3 lignes
open (Descr1,'<','./cobaye') or die ("ouverture impossible $!");
while(defined (my $ligne = <Descr1> ) ){
print $ligne;
}
# chomp efface le \n de chaque ligne lue dans cobaye -> affichage sur une seule ligne
open (Descr2,'<','./cobaye') or die ("ouverture impossible $!");
while(defined ( my $ligne = <Descr2> ) ){
chomp $ligne;
print $ligne;
}
close(Descr2);
close(Descr1);
print "\n";
- reverse
- Inverse l'ordre des caractères d'une chaîne.
#!/usr/bin/perl -w
use strict;
# renversement d‘une liste
my @tableau = qw(premier deuxieme troisieme quatrieme);
print reverse @tableau; # quatriemetroisiemedeuxiemepremier
print "\n";
# renversement d‘une chaîne (le 3e item)
my $envers= reverse $tableau[2];
print $envers;# emeisiort