Problèmes Perl
MrCanard
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
killtiret9 Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
killtiret9 Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
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 ;)
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:
- Problèmes Perl
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- DzSoft Perl Editor - Télécharger - Édition & Programmation
- Comment lire un fichier .pl perl ? - Forum Windows
- Perl: transformer un fichier en package ✓ - Forum Perl
4 réponses
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
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
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
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
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
Merci quand même de te décarcasser pour moi :)
Canard
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
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
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
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
Ta réponse me supprime un ou les deux du doublons ?
En tout cas, merci d'avoir répondu
Canard