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. 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
  2. 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. 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. 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