[PERL] unshift et les tableaux de tableaux

Fermé
stéphane - 25 sept. 2006 à 17:36
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 sept. 2006 à 22:47
Bonjour à tous,

Je ne parviens pas à réaliser un unshift sur un tableau à 2 dimensions. J'ai créé ce tableau pour stocker les lignes d'un fichier. J'obtiens par exemple après mise en tableau :

@tab = ("un","deux","trois",
"quatre", "cinq", "six",
"sept","huit","neuf")

J'aimerais maintenant écrire un commentaire, parfois, à la fin d'une ligne; ceci donnerait :

@tab = ("un","deux","trois", "un commentaire",
"quatre", "cinq", "six", "un autre commentaire"
"sept","huit","neuf")


J'ai essayé avec un unshift, mais le résultat s'est montré assez abomibable, et le recours aux références m'a quelque peu rebuté ....


Si vous avez des suggestions, merci d'avance,

Stéphane

3 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 sept. 2006 à 18:38
Salut,

tu ne peux pas écrire des commentaires dans un tableau

Un tableau est un variable qui contient une liste des elements

Ce que tu as dans le tableau "un commentaire" est un element de la liste et pas un commentaire

Tu peux stocker les lignes d'un fichier dans un tableau de la façon suivante
#!/usr/bin/perl
use warnings;use strict;

open LIRE,"fichier" or die "E/S : $!\n";

while ( <LIRE> ) {
    push @tab,$_;
}
Pour les commentaires tu peux faire comme ça
#!/usr/bin/perl
use warnings;use strict;

my @tab = ("un","deux","trois");      # un commentaire
@tab = (@tab,"quatre", "cinq", "six");# un autre commentaire
@tab = (@tab,"sept","huit","neuf");   # un autre commentaire 
Si tu me dit exactement ce que tu veux, peut être je pourrai t'aider ;)

lami20j

P.S. Et je ne vois pas où tu as tableaux de tableaux
0
bams14 Messages postés 1 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 25 septembre 2006
25 sept. 2006 à 20:48
Merci de ta réponse.
Je me suis effectivement mal exprimé : par "commentaire", je voulais dire ajouter du texte dans mon tableau (ce qui constituerait un commentaire pour l'utilisateur dans le fichier final, du type "cette ligne a été traitée", etc).

En gros : j'ouvre un fichier texte composé de lignes, et je le vide dans mon tableau. On peux dire schématiquement que je mets chaque mot dans un tableau, et ce tableau est stocké dans un tableau. Je me retrouve avec un tableau a 2 dimensions.
Je traite parfois ces lignes. Et c'est là que j'aimerais ajouter dans mon tableau quelques mots...
0
hssissen Messages postés 844 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 9 janvier 2017 50
25 sept. 2006 à 22:14
Salut,
Bon ça fait un bon bout de temps que je n'ai pas travaillé avec PERL, mais si j'ai bine compris ton probleme, tu peux utiliser le concept de LIST. C'est une sorte de vecteur que tu peux mettre tout ce que tu veux: vecteurs, matrices, tableaux... c'est juste une voie qui vaut le coup d'explorer.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > hssissen Messages postés 844 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 9 janvier 2017
25 sept. 2006 à 22:47
Salut,

ça fait un bon bout de temps que je n'ai pas travaillé avec PERL
C'est une sorte de vecteur que tu peux mettre tout ce que tu veux: vecteurs, matrices, tableaux...


Un seul mot : hash

lami20j
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 sept. 2006 à 21:05
Re,

je ne suis toujours pas si j'ai bien compris.
pourquoi utiliser tableaux de tableaux.

Voilà comment je vois dans ton cas.
J'ai crée un fichier qui contient 3 lignes.
lami20j@debian:~/trash$ cat steph.txt
line 1
line 2
line 3
Je traite les lignes en mettant tout en majuscules.
Le script
#!/usr/bin/perl
use warnings;use strict;

open LIRE,"steph.txt" or die "E/S : $!\n";

while ( <LIRE> ){
  chomp;
  print uc($_)," - traitement de la ligne $.\n";
}
Le résultat
lami20j@debian:~/trash$ perl ccm_vider.pl
LINE 1 - traitement de la ligne 1
LINE 2 - traitement de la ligne 2
LINE 3 - traitement de la ligne 3
lami20j

P.S. Si j'ai mal compris, tu peux me donner un exemple concret.
0