Problèmes Perl

Fermé
MrCanard Messages postés 22 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 26 septembre 2008 - 16 juil. 2008 à 10:09
killtiret9 Messages postés 1 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 8 août 2008 - 8 août 2008 à 14:24
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 ;)
A voir également:

4 réponses

davlar Messages postés 75 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 11 mai 2009 57
16 juil. 2008 à 23:40
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
Juste une question :)

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

En tout cas, merci d'avoir répondu

Canard
0
davlar Messages postés 75 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 11 mai 2009 57
21 juil. 2008 à 17:17
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
MrCanard Messages postés 22 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 26 septembre 2008 1
22 juil. 2008 à 09:40
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
davlar Messages postés 75 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 11 mai 2009 57
23 juil. 2008 à 17:48
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
MrCanard Messages postés 22 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 26 septembre 2008 1
24 juil. 2008 à 09:11
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
davlar Messages postés 75 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 11 mai 2009 57 > MrCanard Messages postés 22 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 26 septembre 2008
24 juil. 2008 à 15:01
Fait 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
killtiret9 Messages postés 1 Date d'inscription vendredi 8 août 2008 Statut Membre Dernière intervention 8 août 2008
8 août 2008 à 14:24
faux pas de handle de fichier il ne peut ouvrir jobs.txt déjà pour commencer
0