Bonjour,
J'ai plusieurs cases vides dans mon tableau. Je ne comprend pas pourquoi sachant que j'ai supprimé les espaces, tabulations, \n.
Est ce que quelqu'un sait comment je peux supprimer les cases vides ?
Merci.
Bonjour,
J'ai plusieurs cases vides dans mon tableau. Je ne comprend pas pourquoi sachant que j'ai supprimé les espaces, tabulations, \n.
Est ce que quelqu'un sait comment je peux supprimer les cases vides ?
Merci.
Oui, en les supprimant !
Ok... Ton exposé est des plus imprécis, je vais te donner une solution qui pourrait te convenir si tu es dans un certain cas, l'un de la dizaine qui pourrait correspondre à ton histoire :
--
Code : Sélectionner tout - Visualiser dans une fenêtre à part @list = grep { not m/^\s*$/ } @list;
Jedaï
Je vais essayer d'être plus precise et d'expliquer la situation.
Je souhaite vérifier la syntaxe d'un fichier. Je place donc chaque ligne du fichier dans un tableau @tabLigne.
Puis je supprimer tous les espaces, \n, tabulation. Je recupere grâce à un split chaque caractère entre '' dans un autre tableau @tabCarac.
Lorsque j'affiche chaque valeur du tableau j'ai parfois des valeurs vides. Je ne comprends pas pourquoi ?
Si tu donnais la partie du code te permettant de remplir ce tableau, nous aurions une meilleure idée du problème. Tu peux effectuer un chomp($ligne) afin de supprimer l'enter en fin de ligne.
Salut jasmine80,
Voilà mon code :
#!/usr/bin/perl -w
my $file = /text.pl" ;
my(@tableauFichier ,@tableauCaractere ,$IdxLigneDuFichier ,$IdxCaractereDeLaLigne);
open(DESC ,$file ) or die "ERREUR ! \n"; while (<DESC> ) {
chomp($_);
push @tableauFichier , $_
}
close(DESC) ;
for ( 0 .. $#tableauFichier) {
$IdxLigneDuFichier = $_ ;
$tableauFichier[$IdxLigneDuFichier] =~ s/\s+//g;
$tableauFichier[$IdxLigneDuFichier] =~ s/\n//g;
$tableauFichier[$IdxLigneDuFichier] =~ s/('.*?')/\n$1\n/g;
my @tableauCaractere = split (/\n/ , $tableauFichier[$IdxLigneDuFichier]) ;
for ( 0 .. $#tableauCaractere ) {
$IdxCaractereDeLaLigne = $_ ;
print "Symbole : <"
. $tableauCaractere[$IdxCaractereDeLaLigne]
."> trouve en ligne $IdxLigneDuFichier " ."a la $IdxCaractereDeLaLigne ere/eme position" ."\n" ;
}
}
Je parcours mon fichier. Je place chaque ligne de mon fichier dans un tableau. Puis je place chaque caractère entre '' dans un tableauCaractere.
Lorsque j'affiche le tableau j'ai des valeurs vides.
Est ce que tu as une idée de ces champs vides ?
Merci d'avance.
Voici le code réécrit plus proprement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #!/usr/bin/perl -w use strict; use warnings; my $file = "texte.pl" ; my(@tableauFichier ,@tableauCaractere ,$IdxLigneDuFichier ,$IdxCaractereDeLaLigne); open(DESC ,$file ) or die "ERREUR ! \n"; @tableauFichier = <DESC>; close(DESC) ; for (my $i = 0; $i<@tableauFichier; $i++){ $tableauFichier[$i] =~ s/[\s\n]+//g; $tableauFichier[$i] =~ s/('.*?')/\n$1\n/g; my @tableauCaractere = split (/\n/ , $tableauFichier[$i]) ; for (my $j = 0; $j<@tableauCaractere; $j++) { print "Symbole : <" . $tableauCaractere[$j] ."> trouve en ligne $i " ."a la ".$j." ere/eme position" ."\n" ; } }
Je ne comprends pas l'utilité de faire un
pour ensuite faire un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $tableauFichier[$IdxLigneDuFichier] =~ s/\s+//g; $tableauFichier[$IdxLigneDuFichier] =~ s/\n//g; $tableauFichier[$IdxLigneDuFichier] =~ s/('.*?')/\n$1\n/g;
Que veux-tu faire avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part my @tableauCaractere = split (/\n/ , $tableauFichier[$IdxLigneDuFichier]) ;
encarder tous tes mots d'un enter afin de pouvoir faire un split après?
Code : Sélectionner tout - Visualiser dans une fenêtre à part $tableauFichier[$i] =~ s/('.*?')/\n$1\n/g;
Que cherches-tu à faire?
Ne devrais-tu pas plutôt faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #!/usr/bin/perl -w use strict; use warnings; my $file = "texte.pl" ; my(@tableauFichier ,@tableauCaractere ,$IdxLigneDuFichier ,$IdxCaractereDeLaLigne); open(DESC ,$file ) or die "ERREUR ! \n"; @tableauFichier = <DESC>; close(DESC) ; for (my $i = 0; $i<@tableauFichier; $i++){ # on ne regarde que les lignes non vides if ($tableauFichier[$i] !~ /^\n/){ chomp($tableauFichier[$i]); # on sépare en fonction des espaces afin de récupérer tous les mots de la ligne my @tableauCaractere = split (/\s/ , $tableauFichier[$i]) ; for (my $j = 0; $j<@tableauCaractere; $j++) { print "Symbole : <" . $tableauCaractere[$j] ."> trouve en ligne $i " ."a la ".$j." ere/eme position" ."\n" ; } } }
Partager