[PERL] Supprimer caractère vide

Résolu
wafa_o Messages postés 112 Statut Membre -  
wafa_o Messages postés 112 Statut Membre -
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

9 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie (je n'ai pas testé ;-)
    @case_non_vide = grep { /.+/ } @case_vide;
    
    1
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    ou
    push $_,@case_non_vide for @case_vide;
    
    1
  3. wafa_o Messages postés 112 Statut Membre 2
     
    Je ne comprend pas ta commande lami20j.
    Je dois déclarer @case_non_vide ?
    0
  4. wafa_o Messages postés 112 Statut Membre 2
     
    Est ce que quelqu'un à d'autre idées à me suggérer svp?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  7. wafa_o Messages postés 112 Statut Membre 2
     
    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
  8. wafa_o Messages postés 112 Statut Membre 2
     
    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
  9. dsgdfhdsgd
     
    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
  10. wafa_o Messages postés 112 Statut Membre 2
     
    Merci dsgdfhdsgd et lami20j, j'ai fais les modifications. Ca fonctionne.
    0