Les tableaux en Perl 1. Qu'est-ce qu'un tableau ?
Un tableau est une structure de variables, c'est à dire qu'une seule variable contient plusieurs valeurs. Ce type de structure est particulierement utile si l'on souhaite utiliser un ordre, ou un rang. Le tableau contient donc un certain nombre d'informations dissociées les unes des autres. Pour accéder à la première valeur du tableau, il suffit d'utiliser "$Nom_Tableau[0]", pour accéder à la n-ième valeur, il faut utiliser "$Nom_Tableau[n]" ! L'intérêt également en Perl, contrairement à d'autre langage, c'est qu'il stocke les chaines de caractères et les valeurs numérique de la même façon. Ainsi, vous pouvez mettre dans un tableau aussi bien du texte, comme un prénom, que des nombres, comme un âge. 2. Exemple d'utilisation
2. 1. Général
Par exemple, on peut vouloir définir l'ordre des enfants dans une famille. Une famille avec 5 enfants nés dans l'ordre "Pierre, Paul, Jean, Jacques et Kringer" peut être enregistrée en utilisant 5 variables, mais ce n'est pas top pratique (trop lourd a gérer...). Vous pouvez donc l'enregistrer dans une seule et même variable, par exemple "@famille", qui contiendra toutes les informations. Voici donc un exemple de tableau : #!/usr/bin/perl @famille = ("Pierre","Paul","Jean","Jacques","Kringer"); for $i (0..4) { print $famille[$i]."\n"; } Voici un exemple d'utilisation des tableaux qui va écrire : Pierre Paul Jean Jacques Kringer Le même résultat peut-être obtenu en entrant les variables ainsi : #!/usr/bin/perl $famille[0]="Pierre"; $famille[1]="Paul"; $famille[2]="Jean"; $famille[3]="Jacques"; $famille[4]="Kringer"; for $i (0..4) { print $famille[$i]."\n"; } 2. 2. ajouter un élément à un tableau
Si vous avez un nouvel enfant, vous devez l'ajouter à la liste, sinon, c'est pas sympa pour lui. Supposons que votre nouveau bébé soit une fille, appelé Cunégonde.Voici comment faire : #!/usr/bin/perl Ceci permet d'ajouter un élément à la fin d'un tableau. Vous ne pouvez pas directement ajouter un
élément au milieu d'un tableau. Si vous voulez malgré tout le faire, vous devez d'abord déplacer tous
les éléments suivants l'enregistrement que vous voulez ajouter, puis remplacer l'élément existant.$famille[0]="Pierre"; $famille[1]="Paul"; $famille[2]="Jean"; $famille[3]="Jacques"; $famille[4]="Kringer"; for $i (0..$#famille) { print $famille[$i]."\n"; } $famille[$#famille]="Cunégonde"; for $i (0..$#famille) { print $famille[$i]."\n"; } Dans notre cas, si vous aviez voulu ajouter Cunegonde entre Jean et Jacques, voici ce que vous auriez dû faire : #!/usr/bin/perl Et voila !$famille[0]="Pierre"; $famille[1]="Paul"; $famille[2]="Jean"; $famille[3]="Jacques"; $famille[4]="Kringer"; for $i (3..$#famille) { $famille[$i+1] = $famille[$i]; } $famille[3]="Cunégonde"; for $i (0..$#famille) { print $famille[$i]."\n"; } 2. 3. supprimer un élément d'un tableau
Il suffit pour cela de changer la valeur de $#[Nom_Tableau]. Cette méthode fait plus bidouille qu'autre chose, c'est vrai, mais vous n'avez pas le choix. Ce qui veut dire que si vous souhaitez enlever un élément au milieu d'un tableau. Il est par contre à noter que les tableaux ne sont pas fait pour ce genre de traitement, mais ils peuvent être utilisés malgré tout, mais du coup, le traitement en est plus compliqué. Par exemple, si je veux supprimer Kringer parce qu'en fait, il est pas sympa, voila comment faire : #!/usr/bin/perl
$famille[0]="Pierre"; $famille[1]="Paul"; $famille[2]="Jean"; $famille[3]="Jacques"; $famille[4]="Kringer"; $#famille = $#famille - 1 for $i (0..$#famille) { print $famille[$i]."\n"; } 3. Tableau multi-dimensionnel
Cela ne veut pas dire que le tableau peut voyager d'une dimension dans l'autre, mais simplement, si on utilise une représentation graphique, qu'il n'y a plus une seule colonne, mais plusieurs. L'intérêt est de pouvoir ainsi regrouper des informations liées entre elles. On se retrouve donc à pouvoir faire l'équivalent d'une base de données. Par exemple, en reprenant l'exemple précédent, on peut facilement ajouter l'âge de la personne en face de son prénom ! Voici comme l'exemple précédent peut être transformé : #!/usr/bin/perl
@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]); for $i (0..4) { print $famille[$i][0]." (".$famille[$i][1].")\n"; } 4. Opération sur les tableaux
4. 1. Taille d'un tableau
Il peut être pratique de compter le nombre d'élément d'un tableau, voici comment faire : #!/usr/bin/perl @famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]); $taille1 = scalar @famille; print "taille1 : $taille1\n"; $taille2 = $#famille; print "taille2 : $taille2\n"; Voici le résultat : taille1 : 5 Comme vous pouvez le constater, il y a une difference de "1". En fait, $#[Nom_Tableau] donne
l'indice du dernier élément du tableau, alors que scalar compte le nombre d'éléments. On obtient donc
le résultat suivant :taille2 : 4 scalar @famille == $#famille + 1 Ceci est toujours vrai, même avec d'autres variables que @famille ! Voici un exemple : 4. 2. Trier un tableau
4.2.1. Tableau à une dimension
Il suffit d'utiliser la fonction "sort"... Elle est faite pour ça ! Par exemple, pour trier dans l'ordre normal (c'est à dire alphanumérique), il suffit de faire ainsi : #!/usr/bin/perl @famille = ("Pierre","Paul","Jean","Jacques","Kringer"); for $i (0..4) { print $famille[$i]."\n"; } @famille = sort (@famille); print "\naprès le tri :\n"; for $i (0..4) { print $famille[$i]."\n"; } Ce qui donne comme résultat: Pierre Paul Jean Jacques Kringer après le tri : Jacques Jean Kringer Paul Pierre 4.2.2. Tableau à plusieurs dimensions
#!/usr/bin/perl Ce code permet de trier des chaines de caractères. Pour faire la même chose pour des nombres, il faut faire
ainsi :
@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]); @famille = sort byage @famille; sub byage { $a1 = $$a[0]; $b1 = $$b[0]; print "$a1\n"; $a1 cmp $b1; } for $i (0..4) { print $famille[$i][0]." (".$famille[$i][1].")\n"; } #!/usr/bin/perl
@famille = (["Pierre",12],["Paul",10],["Jean",9],["Jacques",5],["Kringer",2]); @famille = sort byage @famille; sub byage { $a1 = $$a[1]; $b1 = $$b[1]; print "$a1\n"; $a1 <=> $b1; } for $i (0..4) { print $famille[$i][0]." (".$famille[$i][1].")\n"; } |