Lire un tableau a 2 dim en perl
zouzoulabelle
-
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
jé un probleme et j arrive pas a avance dans mon tp
alors voila pour mon tp j utilise un fichier :
un exemple ressemble a mon fichier (1.txt)
region dep com
23 15 16
17 18 19
je veux ecrire un programme qui fe le parcours de tous le fichier et il m affiche tous le contenu du fichier mais un par un .
voici mon programme:
#!/usr/bin/perl
use strict;
open(F, "<1.txt") || die "Erreur E/S : $!\n";
my @contenu = <F>;#jé met le contenu du fichier dans une table a 2 dimension
for $i ( 0 .. 3) {
for $j ( 0 .. 3 ) {
print "element $i $j is $contenu[$i][$j]\n";
}
}
close F;
quand j execute mon programme je recoie le message suivant :
Global symbol "$i" requires explicit package name at exemple.pl line 5.
Global symbol "$j" requires explicit package name at exemple.pl line 6.
Global symbol "$i" requires explicit package name at exemple.pl line 7.
Global symbol "$j" requires explicit package name at exemple.pl line 7.
Global symbol "$i" requires explicit package name at exemple.pl line 7.
Global symbol "$j" requires explicit package name at exemple.pl line 7.
Execution of exemple.pl aborted due to compilation errors.
merci
jé un probleme et j arrive pas a avance dans mon tp
alors voila pour mon tp j utilise un fichier :
un exemple ressemble a mon fichier (1.txt)
region dep com
23 15 16
17 18 19
je veux ecrire un programme qui fe le parcours de tous le fichier et il m affiche tous le contenu du fichier mais un par un .
voici mon programme:
#!/usr/bin/perl
use strict;
open(F, "<1.txt") || die "Erreur E/S : $!\n";
my @contenu = <F>;#jé met le contenu du fichier dans une table a 2 dimension
for $i ( 0 .. 3) {
for $j ( 0 .. 3 ) {
print "element $i $j is $contenu[$i][$j]\n";
}
}
close F;
quand j execute mon programme je recoie le message suivant :
Global symbol "$i" requires explicit package name at exemple.pl line 5.
Global symbol "$j" requires explicit package name at exemple.pl line 6.
Global symbol "$i" requires explicit package name at exemple.pl line 7.
Global symbol "$j" requires explicit package name at exemple.pl line 7.
Global symbol "$i" requires explicit package name at exemple.pl line 7.
Global symbol "$j" requires explicit package name at exemple.pl line 7.
Execution of exemple.pl aborted due to compilation errors.
merci
A voir également:
- Perl tableau 2 dimensions
- Tableau word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
4 réponses
Je crois que l'interpréteur est explicite:
for $i ( 0 .. 3)
En Perl, la boucle for a la même structure qu'en C, il vaudrait mieux mettre:
Bonne continuation.
for $i ( 0 .. 3)
En Perl, la boucle for a la même structure qu'en C, il vaudrait mieux mettre:
for ($i=0; $i<4; $i++)Ou alors il faut utiliser 'foreach'.
Bonne continuation.
Salut,
my @contenu = <F>;#jé met le contenu du fichier dans une table a 2 dimension
C'est ça que tu crois, mais en réalité tu as un tableau à une seule dimension.
Ton tableau a la structure suivante :
Un tableau à deux dimensions à la structure suivante
Tu dois créer le tableau à deux dimensions.
Voici une manière de le faire
la boucle for a la même structure qu'en C,
Oui est non.
Si on écrit comme ça for ($i=0; $i<4; $i++), tu as raison c'est oui.
En revanche si on écrit comme ça, for est synonyme de foreach
my @contenu = <F>;#jé met le contenu du fichier dans une table a 2 dimension
C'est ça que tu crois, mais en réalité tu as un tableau à une seule dimension.
Ton tableau a la structure suivante :
@contenu=("region", "dep", "com", "23", "15", "16", "17", "18", "19");
Un tableau à deux dimensions à la structure suivante
@TdT=( [ "region", "dep", "com" ], [ "23", "15", "16" ], [ "17", "18", "19" ], );
Tu dois créer le tableau à deux dimensions.
Voici une manière de le faire
lami20j@debian-acer:~$ cat 1.txt region dep com 23 15 16 17 18 19 lami20j@debian-acer:~$ cat 1.pl #!/usr/bin/perl use strict;use warnings; my $fic="1.txt"; open F,$fic or die "E/S : $fic $!\n"; my @tab; while(<F>){ push @tab,[ split ]; } for my $i(0..$#tab){ for my $j(0..$#{$tab[$i]}){ print "$tab[$i][$j]\n"; } } __END__ lami20j@debian-acer:~$ perl 1.pl region dep com 23 15 16 17 18 19 lami20j@debian-acer:~$
la boucle for a la même structure qu'en C,
Oui est non.
Si on écrit comme ça for ($i=0; $i<4; $i++), tu as raison c'est oui.
En revanche si on écrit comme ça, for est synonyme de foreach
lami20j@debian-acer:~$ perl -e 'print "$_\n" for(0..2)' 0 1 2 lami20j@debian-acer:~$ perl -e 'print "$_\n" foreach(0..2)' 0 1 2
Re,
je veux ecrire un programme qui fe le parcours de tous le fichier et il m affiche tous le contenu du fichier mais un par un .
En revanche si ce n'est que l'affichage qui t'interesse alors tu peux faire tout simplement
je veux ecrire un programme qui fe le parcours de tous le fichier et il m affiche tous le contenu du fichier mais un par un .
En revanche si ce n'est que l'affichage qui t'interesse alors tu peux faire tout simplement
lami20j@debian-acer:~$ cat 1.txt region dep com 23 15 16 17 18 19 lami20j@debian-acer:~$ cat 2.pl #!/usr/bin/perl use strict;use warnings; my $fic="1.txt"; open F,$fic or die "E/S : $fic $!\n"; while(<F>){ s/\s+/\n/g; print; } __END__ lami20j@debian-acer:~$ perl 2.pl region dep com 23 15 16 17 18 19