[PERL] Supprimer caractère vide

Résolu/Fermé
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 - 21 juil. 2008 à 12:59
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 - 22 juil. 2008 à 14:29
Bonjour,

Est ce que quelqu'un sait comment supprimer des cases vides dans un tableau en perl?
J'ai supprimé dans mon tableau les \n (=~ s/\n//g;), les espaces (=~ s/\s+//g;), les tabulations (s/^[ \t]*//;s/[ \t]*$// ). Mais j'ai toujours le même probleme.

Merci.

9 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
21 juil. 2008 à 13:15
Salut,

essaie (je n'ai pas testé ;-)
@case_non_vide = grep { /.+/ } @case_vide;
1
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
21 juil. 2008 à 13:16
Re,

ou
push $_,@case_non_vide for @case_vide;
1
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2
21 juil. 2008 à 14:06
Je ne comprend pas ta commande lami20j.
Je dois déclarer @case_non_vide ?
0
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2
21 juil. 2008 à 14:49
Est ce que quelqu'un à d'autre idées à me suggérer svp?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
21 juil. 2008 à 20:12
Salut,

voici un exemple, pour mieux comprendre
lami20j@debian:~/trash$ cat tableau.pl
#!/usr/bin/perl
#
my @vide = ("a","b","","d");

print "taille = ", scalar @vide,"\n";

my @non_vide1 = grep { /.+/ } @vide; # 1
my @non_vide2 = grep { $_ ne "" } @vide; # 2
for(@vide){push @non_vide3,$_ unless $_ eq "";} #3


print "taille = ", scalar @non_vide1,"\n";
print "taille = ", scalar @non_vide2,"\n";
print "taille = ", scalar @non_vide3,"\n";

print "-" x 20,"\n";
@vide=();
print "taille = ", scalar @vide,"\n";
print "taille = ", scalar @non_vide1,"\n";
print "taille = ", scalar @non_vide2,"\n";
print "taille = ", scalar @non_vide3,"\n";
__END__
lami20j@debian:~/trash$ perl tableau.pl
taille = 4
taille = 3
taille = 3
taille = 3
--------------------
taille = 0
taille = 3
taille = 3
taille = 3
0
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2008 à 09:47
Salut,

J'ai essayé ton code, je l'ai adapté avec le mien mais j'ai toujours le même problème :

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 "$tableauCaractere[$IdxCaractereDeLaLigne\n";
}
}

Le fichier est de la forme :
my %toto => ( 'AAAAAA' =>{ 'uuu' => [ 'toto','tata', 'mouloud' ] } );
Je souhaite recuperer chaque mot entre '' dans un tableau.

Merci.
0
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2008 à 12:34
Pour etre plus précise je cherche à placer chaque caractère dans le tableau car je dois vérifier la syntaxe du fichier. (exemple : après my%toto je dois trouver => sinon erreur,
après '[A-Z]+' je dois trouver , sinon erreur ... ).

Une idée?
0
Plop,

Dans ton code :
$tableauFichier[$IdxLigneDuFichier] =~ s/\s+//g;
$tableauFichier[$IdxLigneDuFichier] =~ s/\n//g;

La deuxième ligne est inutile, les \n sont compris dans les caractères représentés par \s.
De plus le + après le \s n'est pas foncièrement utile non plus, vu qu'avec l'option g tu les supprimeras tous de toute manière.
Tu peux te contenter de ça :
$tableauFichier[$IdxLigneDuFichier] =~ s/\s//g;

Sinon pour la suppression des cases vides, la solution de lamij est bonne, adaptée a ton code ca donnerait un truc comme ca, après le split :

@tableauCaractere = grep {/.+/} @tableauCaractere;

Cdt
0
wafa_o Messages postés 109 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 4 janvier 2011 2
22 juil. 2008 à 14:29
Merci dsgdfhdsgd et lami20j, j'ai fais les modifications. Ca fonctionne.
0