Problèmes Perl

Bonjour,

J'ai un petit soucis, je cherche à ce que quand j'ai deux lignes égales, je supprime les deux
lignes, en fait j'ai une liste avec des doublons et des uniques (ce sont des codes mais ça
ressemble à des mots ^^) et ce que je cherche c'est supprimer les lignes qui sont égales
de façon à obtenir que les lignes qui n'apparaissent qu'une fois.

Voici mon code :

open (my $fic9, "< Jobs.txt");

my @tab = <$fic9>;
my $i = 0;
my $j = 0;

foreach $i (@tab) {
if ($i =~ "") {
}
else {
foreach $j (@tab) {
if($i == $j) {
$i = "";
$j = "";
exit;
}
else {
}
}
}
}

print "\nSuppression quand des repetitions ...\n\n";
system("pause");

close $fic9;

Je débute depuis peu à Perl et je manque encore d'entrainement :)
Merci d'avance pour votre aide ;)
Configuration: Windows XP
Firefox 3.0

4 réponses

  1. Voici la réponse. (Elle est à la fin)

    http://www.commentcamarche.net/forum/affich 213976 suppression de doublons perl

    Ou

    Supprimer les doublons dans une liste

    Ce module permet de supprimer les entrées en double dans un tableau.

    use List::Uniq qw(:all);

    open (my $fic9, "< Jobs.txt");
    my @list = <$fic9>;

    my @uniq_list = uniq(@list);

    foreach my $line(@uniq_list) {
    print "$line\n";
    }

    Dave
    0
    1. Juste une question :)

      Ta réponse me supprime un ou les deux du doublons ?

      En tout cas, merci d'avoir répondu

      Canard
      0
  2. Hummm.

    Effectivement, ça ne règle pas tout a fait ton problème. Ma présente réponse laisse une l'une des 2 lignes.

    Dave
    0
    1. Ouais c'est ça le problème ^^, c'est que j'arrive pas à laisser aucune des deux lignes ...

      Merci quand même de te décarcasser pour moi :)

      Canard
      0
      1. Tient: C'est pas très élégant mais ça marche:

        open (my $fic1, "< Jobs.txt");

        my @liste = (sort(<$fic1>));
        my @comparer = (sort(@liste));

        my @liste_unique = ();
        my $numArgs = $#liste +1;
        my $existeendouble = 0;

        foreach my $line(@liste)
        {
        for ($compteur = 0; $compteur < $numArgs; $compteur++)
        {
        $line =~ s/\s//g;
        @comparer[$compteur] =~ s/\s//g;

        if($line eq @comparer[$compteur])
        {
        $existeendouble += 1;
        }
        $compteur +1;
        }

        if ($existeendouble < 2)
        {
        push( @liste_unique, $line);
        }
        $existeendouble = 0;
        }

        print "Unique: @liste_unique\n";

        A+ Dave
        0
        1. Merci beaucoup il m'a l'air d'être plutôt pas mal, seul une question :) je l'ai testé et j'ai ça :

          Scalar value @comparer[$compteur] better written as $comparer[$compteur] at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 273.
          Scalar value @comparer[$compteur] better written as $comparer[$compteur] at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 275.
          Global symbol "$compteur" requires explicit package name at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 270.
          Global symbol "$compteur" requires explicit package name at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 270.
          Global symbol "$compteur" requires explicit package name at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 270.
          Global symbol "$compteur" requires explicit package name at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 273.
          Global symbol "$compteur" requires explicit package name at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 275.
          Global symbol "$compteur" requires explicit package name at C:\Documents and Settings\BOUAGUME\Mes documents\...\Recup_Job_Deux.pl line 279.

          quand je l'éxécute dans l'invite de commande, car en direct il veut pas ^^ (j'ai bien rajouté un system("pause"); à la fin xD)
          en tout cas merci de ton aide ;)

          Canard
          0
        2. @MrCanardFait la modification suivante:

          Remplace --> @comparer[$compteur]

          par --> $comparer[$compteur]

          Et met un entête du genre : #!C:\perl\bin\perl.exe -X

          Tu n'auras plus les avertissements.

          A+

          Dave
          0
        3. faux pas de handle de fichier il ne peut ouvrir jobs.txt déjà pour commencer
          0