Rechercher : dans
Par :

[PERL] Supprimer caractère vide

Dernière réponse le 22 jui 2008 à 14:29:05 wafa_o, le 21 jui 2008 à 12:59:51 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « [PERL] Supprimer caractère vide » dans :
Mettre une vidéo dans son ipod / iphone / ipod nano VoirLes iPod et iPhone acceptent uniquement des vidéos au format MP4. Voici la procédure pour les convertir et pour les uploader sur l'iPod / iPhone. Convertir une vidéo au format MOV en MP4 à partir d'iTunes ? Convertir une vidéo au format AVI en...
Remplacer la bande son d'une vidéo VoirVous avez une vidéo et vous voulez remplacer la bande son par une de votre création pour faire un doublage ou une parodie par exemple ? Voici comment faire. On va utiliser le logiciel Windows Movie Maker (il est fournit avec Windows, si ce n'est...
Le format YUV (YCrCb) VoirLe standard YUV Le standard YUV (appelé aussi CCIR 601), auparavant baptisée YCrCb (Y Cr Cb), est un modèle de représentation de la couleur dédié à la vidéo analogique. Il se base sur un mode de transmission vidéo à composantes séparées utilisant...

1

lami20j, le 21 jui 2008 à 13:15:15

Salut,

essaie (je n'ai pas testé ;-)

@case_non_vide = grep { /.+/ } @case_vide;
106485010510997108

Répondre à lami20j

2

lami20j, le 21 jui 2008 à 13:16:36

Re,

ou

push $_,@case_non_vide for @case_vide;
106485010510997108

Répondre à lami20j

3

wafa_o, le 21 jui 2008 à 14:06:40

Je ne comprend pas ta commande lami20j.
Je dois déclarer @case_non_vide ?

Répondre à wafa_o

4

wafa_o, le 21 jui 2008 à 14:49:33

Est ce que quelqu'un à d'autre idées à me suggérer svp?

Répondre à wafa_o

5

lami20j, le 21 jui 2008 à 20:12:07

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
106485010510997108

Répondre à lami20j

6

wafa_o, le 22 jui 2008 à 09:47:30

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.

Répondre à wafa_o

7

wafa_o, le 22 jui 2008 à 12:34:10

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?

Répondre à wafa_o

8

dsgdfhdsgd, le 22 jui 2008 à 14:21:00

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

Répondre à dsgdfhdsgd

9

 wafa_o, le 22 jui 2008 à 14:29:05

Merci dsgdfhdsgd et lami20j, j'ai fais les modifications. Ca fonctionne.

Répondre à wafa_o