12.07.2015 Views

PERL POUR LA MANIPULATION DE TEXTES Une Introduction par l ...

PERL POUR LA MANIPULATION DE TEXTES Une Introduction par l ...

PERL POUR LA MANIPULATION DE TEXTES Une Introduction par l ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

incrémentée de 1.EXEMPLE 4 : Que permet de faire le script suivant? Il utilise la plu<strong>par</strong>t d'éléments qu'on a déjàrencontrés plus l'opérateur de com<strong>par</strong>aison > (supérieur). Dans notre exemple, cet opérateur permetde com<strong>par</strong>er deux quantités numériques. L'exemple montre aussi que le bloc else dans une structureif-else est optionnel.===================#!/usr/bin/perl# ce script permet de .....$fich=shift ;open(FICHIER, $fich) || die "Impossible d'ouvrir le fichier : $fich\n";$max=0;while () {$len=length($_);if ($len > $max){$max=$len;}}print "MAXIMUM: $max\n";===================EXEMPLE 5 : Que permet de faire le script suivant?==================#!/usr/bin/perl# ce script permet de ....................................$fich=shift ;open(FICHIER, $fich) || die "Impossible d'ouvrir le fichier : $fich\n";while () {tr/A-ZÂÀÄÉÈÊËÎÏÔÖÓÛÙÜÇÑ/a-zâàäéèêëîïôöóûùüçñ/;s/([0-9]+) ([0-9]+)/$1$2/g;s/ ([sdlmntcj]')([a-z]+)/ $1\n$2/g;s/^([dlmntcj]')([a-z]+)/$1\n$2/g;s/(qu|jusqu|lorsqu)'/$1'\n/g;tr/\t//d;s/\.\n/\n.\n/;s/([,\.]) /\n$1 /g;


}tr/ /\n/;print $_;======================Certains éléments qu'on avait vus lors des séances de familiarisation avec l'environnement Linux,mais leur syntaxe est légèrement différente :tr permet de transformer des ensembles de caractères (ici les majuscules en minuscules).NOTE : les deux ensembles de caractères doivent être de taille égale.s permet d'effectuer des substitutions sur des chaînes de caractères. Cette instruction permet demanipuler aussi des expressions régulières.$1 et $2 font référence à la première et deuxième sous-expression d'une expression régulière,qu'on souhaite réutiliser dans les substitutions. Ces deux variables spéciales sont l'équivalentdes variables \1 et \2 qu'on avait vu avecla commande grep).Reprenons tour à tour les éléments du langage perl qu'on a vu jusqu'ici, et examinons-les d'unemanière plus approfondie :Les variablesL'opérateur print.Variables scalaires :- affectation d'une valeur- opérateurs de com<strong>par</strong>aisonLes structures de contrôleSubstitutions et transformations sur les chaînes de caractèresOuverture des fichiers et lecture


PREMIERE PARTIE0/ Qu'est-ce que perl et qu'est-ce qu'on peut faire avec perl?1/ Les variables : scalaires, tableaux, tableaux associatifs2/ L'opérateur print.3/ Variables scalaires :- affectation des valeurs- opérateurs de com<strong>par</strong>aison sur les valeurs scalaires (nombres et chaînes de caractères)- substitutions et transformations sur les chaînes de caractères4/ Les structures de contrôle5/ Ouverture des fichiers0/ Qu'est-ce que Perl et pourquoi on s'y intéresse?Perl (Practical Report and Extraction Language ou Pathological Eclectic Rubbish Lister) est unlangage de programmation. Il est <strong>par</strong>ticulièrement adapté pour le traitement des fichiers textes (et lesCGI). On l'utilise principalement pourla facilité avec laquelle on peut développer des programmesla puissance du mécanisme des expressions régulièressimplicité - possibilité de faire des manipulations de textes sans prendre des cours deprogrammation avancés. (On arrive à faire pas mal de choses même en étant débutants).les programmes écrits en Perl peuvent être exécutés sous Unix, Windows, Mac, etc sansmodification (portable)gratuité : un nombre impressionnant de librairies et utilitaires est disponible sur internet1/ Les variablesUn programme informatique gère des données qu’il stocke en mémoire. On nomme ces donnéespour pouvoir accéder aux zones de la mémoire centrale les contenant. Ces données peuvent changerau cours de l'exécution d'un programme : donc les noms qu'on leur donne correspond à des variables.Par exemple, dans le script 4, la variable $max peut changer de valeur a chaque répétition de la bouclewhile. De même, dans le script no. 3 les variables $nombre_lignes_vides et$nombre_lignes_non_vides, qui au début du script valent 0 toutes les deux - on dit qu'elle sontinitialisées à 0, changent alternativement de valeur. Pour mieux se représenter ce que c'est qu'unevariable et sa valeur on peut utiliser la métaphore de la boite aux lettres : une variable est comme uneboite aux lettres nommée, et sa valeur est son contenu à un moment donné.Il existe plusieurs types de variables qu'on manipule en Perl :1. des scalaires : des variables ayant une valeur simple, qu'on peut manipuler simplement. Telest le cas des nombres entiers (comme 2, 30, etc. comme - les variables $max, $length,$nombre_lignes_vides ont des valeurs de ce type), nombres flottants (comme 20,35) et leschaînes de caractères (comme la variable $fich qui prend sa valeur sur la ligne de commande).Les valeurs des chaînes de caractères sont entourées de guillemets simples ou doubles. Lenom des variables est précédé du signe $.2. tableaux (on reviendra sur ce type de valeur lors de la prochaine séance). Un tableaureprésente une liste de valeurs scalaires ordonnées; chaque élément d'un tableau est unevariable scalaire. Les noms de variables de type tableau sont précédés <strong>par</strong> le symbole @.Par exemple, on peut stocker une ligne qu'on lit dans un fichier dans un tableau afin


d'effectuer certaines opérations dessus:@ligne=("the", "cat", "is", "on", "the", "mat", ".");On peut se représenter cette variable comme ceci :The cat is on the mat .0 1 2 3 4 5 6Chaque élément du tableau est placé dans une case du tableau (une zone mémoire associée) àlaquelle on peut accéder à l'aide de l'indice de la case. NOTE : les indices dans un tableaucommencent à 0. Par exemple, si on vert accéder au 5ème mot de la phrase (qui aura doncl'indice 4) on va utiliser la notation :$ligne(4)La valeur de cette variable scalaire (chaîne de caractères) vaut "the".Lors de la lecture de la ligne suivante d'un fichier, la taille et la valeur d'une variable tableauchange :@ligne=("the", "cat", "is", "sick", "and", "is", "waiting", "to", "get", "better", ".");$ligne(4) vaut maintenant "and".3. hachages ou tableaux associatifs. (On reviendra sur ce type de valeur dans deux séances).Les tableaux associatifs sont une type <strong>par</strong>ticulier de tableau. Tandis que les éléments d’untableau sont indexés à <strong>par</strong>tir de 0, les éléments d’un hachage sont indexés <strong>par</strong> une valeurscalaire quelconque. Il s'agit d'une collection de paires clé-valeur. La clés <strong>par</strong> laquelle leséléments sont indexés doit être unique. Les noms des valeurs des variables de type associatifsont précédés <strong>par</strong> le symbole %. Un exemple qui permet de se représenter le type tableauassociatif d'une façon simple est le type dictionnaire. Par exemple :%dico = ("cat" =>"Any animal of the natural family Felidae","mat" => "A thick flat fabric","sick" => "Affected with disease of any kind");Ou alors%dico = ("cat" =>"Nom","mat" => "Nom","sick" => "Adjectif");Les symboles $,@,% permettent de repérer les variables plus facilement, et indiquent aussi de queltype de variable il s'agit. Regardons maintenant plus en détail les valeurs scalaires (avec une valeursingulière), après une courte digression sur l'opérateur print.2/ L'opérateur printIl s'agit d'un opérateur qui prend en argument une liste (on peut imprimer plusieurs choses, sé<strong>par</strong>éespas des virgules), comme on a fait dans le script 3 :print "lignes vides : ", $nombre_lignes_vides, " et lignes non-vides : ", $nombre_lignes_non_vides,"\n";L'opérateur print a, dans ce cas, 5 arguments.On aurait pu écrire la même chose en incluant les variables et le texte à imprimer dans une mêmechaîne de caractères. Cette opération s'appelle interpolation des variables :print "lignes vides : $nombre_lignes_vides et lignes non-vides : $nombre_lignes_non_vides \n";L'interpolation des variables est possible uniquement avec les guillemets doubles.3/Variables scalaires : nombres et chaînes de caractèresVous avez peut-être remarqué dans les exemples de scripts qu'on a étudiés que les variables nombre etchaînes de caractères sont déclarées de la même façon, sans indiquer le type comme ceci :$max=0;####(entier)


$nombre1=12.5 ; #### (nombre réel)$mot="cat"; ####(chaîne de caractères)A l'aide de l'opérateur print on peut les imprimer les trois variables comme ceci :print "\$max vaut $max, \$nombre vaut $nombre et \$mot vaut $mot\n";REMARQUE : on a du protéger ici le symbole $ afin de pouvoir l'imprimer, et éviter que l'opérateurprint affiche la valeur de $max, $nombre1 et $mot. Tous les méta-caractères comme $,@ et %doivent être protégés de cette façon fin de pouvoir les imprimer.A la différence de Perl, dans la plu<strong>par</strong>t de langages de programmation on doit déclarer le type dechaque variable. Par exemple, en C, une déclaration+initialisation comme :$nb_lignes_vides =0 ;devra indiquer le type de la variable qu'on veut déclarer comme ceci :int nb_lignes_vides = 0;Cette ligne déclare la variable nb_lignes_vides de type entier, et lui affecte une valeur initiale qui estégale à 0.C'est pour cette raison que Perl est appelé un langage faiblement typé. C'est à cause de cette manquede rigueur que Perl n'est pas utilisé pour de gros développement de programmes, mais plutôt pour depetites moulinettes.Déclarer et modifier les valeurs des scalaires.Afin d'illustrer ces concepts regardons les deux scripts suivants :#!/usr/bin/perl$nombre = 20 ;$nb = 3 ;$nombre ++;print "\$nombre vaut $nombre maintenant\n";$nombre--;print "\$nombre vaut $nombre maintenant\n";$nombre +=22;print "\$nombre vaut $nombre maintenant\n";$nombre -= 22 ;print "\$nombre vaut $nombre maintenant\n";$nombre*=$nb ;print "\$nombre vaut $nombre maintenant\n";$nombre /=$nb ;print "\$nombre vaut $nombre maintenant\n";$nombre=$nombre**3 ;print "\$nombre vaut $nombre maintenant\n";====================#!/usr/bin/perl$prenom = "Marion" ;$nom = "Vallet";$nom = $prenom." ".$nom." ";print "\$nom vaut maintenant $nom\n";


=====================Quel est le rôle de la fonction chop?=====================#!/usr/bin/perlprint "Entrez votre nom s'il vous plaît\n";$nom= ;print "*$nom*\n"; ### pourquoi le deuxième symbole * est-il imprimésur une autre ligne?chop $nom;print "maintenant \$nom vaut *$nom*\n";chop $nom;print "maintenant \$nom vaut *$nom*\n" ;======================Cet exemple introduit aussi un descripteur prédéfini ou standard input - c'est à dire l'entréestandard. Il permet de lire la valeur d'une variable au clavier. On reviendra sur les descripteurs defichiers lors de la prochaine séance. Les descripteurs de fichiers permettent d'interagir avec lesfichiers, la console d'entrée, etc.Quelle est la différence entre l'opérateur chop et chomp (à juger <strong>par</strong> le script ci-après?#!/usr/bin/perlprint "Entrez votre nom s'il vous plaît\n";$nom= ;print "$nom\n";chomp $nom;print "maintenant \$nom vaut *$nom*\n";chomp $nom;print "maintenant \$nom vaut *$nom*\n" ;=======================

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!