IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Supprimer lignes identiques dans un fichier


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut Supprimer lignes identiques dans un fichier
    Bonjour à tous.
    j'ais réaliser un script qui analyse un fichier de maillog pour en extraire diverses informations sous le format @ip|login|e-mail|nom|prenom pour les écrire dans un deuxiéme fichier qui servire a traiter les données pour les rentrer dans ne bases de données. Dans ce deuxiéme fichier j'ais des lignes ce qui est dut a l'analyse du maillog.
    Ma question est simple :
    Comment remplacer les lignes identiques de mon fichier par une seul ligne ? ?
    Je m'enbrouille dans me reflexion a chaque fois

    Je sait que cela doit être simple mais je n'arrive pas a trouver une solution simple et efficace

    Voila mon fichier analysant le maillog j'aimerais intégrer le remplacement des lignes identiques dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #!/usr/bin/perl
     
    use DBI();
     
    #Connexion a la bdd
    $dbh = DBI->connect("DBI:mysql:database=CRI;host=localhost","user","mdp");
     
     
    $file='mailogepure';
    open(FICH, $file) or die "Ouverture de  $file impossible : $!\n";
    #$file2='>user_adresseip';
    #open(FICH2, $file2) or die "Ouverture de  $file2 impossible : $!\n";
    $fileout='>user_adresseip';
    open(FICHOUT, $fileout) or die "Ouverture de  $fileout impossible : $!\n";
     
    $query="select ip from computer";
    $sth = $dbh->prepare($query);
    $sth->execute();
     
    my $i=0;
    my $j=0;
    my $k=0;
    my $l=0;
    my $mail="";
    my @adresse;
     
    while($lines = <FICH>)
    {	if ($lines=~ /.+Passed CLEAN, \[(\d+\.\d+\.\d+\.\d+)\] \[\d+\.\d+\.\d+\.\d+\] <(.+?)\@fourniseur.com> -> .+/)
    		{
    			$adresse=$1;
    			$user=$2;
    			$mail="$user\@fourniseur.com";
    			$nom="";
    			$prenom="";
     
    			if($user=~/(.+)\.(.+)/)
    			{
    				$nom=$2;
    				$prenom=$1;
    			}
    		print(FICHOUT "$adresse|$user|$mail|$nom|$prenom\n");
    		}
     
    	if ($lines=~ /.+Passed CLEAN, \[\d+\.\d+\.\d+\.\d+\]\[(\d+\.\d+\.\d+\.\d+)\] .+ -> <(.+?)\@fourniseur.com>.+/)
    		{
    			$adresse=$1;
    			$user=$2;
    			$mail="$user\@fourniseur.com";
    			$nom="";
    			$prenom="";
     
    			if($user=~/(.+)\.(.+)/)
    			{
    				$nom=$2;
    				$prenom=$1;
    			}
    		print(FICHOUT "$adresse|$user|$mail|$nom|$prenom\n");
    			}
    }
     
     
    close(FICH);
    #close(FICH2);
    close(FICHOUT);

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    euh, j'suis pas sur d'avoir compris ! tu a un fichier que tu veux parser et qui contient des lignes doublées, c'est bien ca?

    si c'est le cas , une vérification ligne a ligne en effectuant une comparaison entre la ligne traitée et la ligne précédente devrait suffir, non?

    pour lire ligne a ligne un fichier voici nu exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #!/usr/bin/perl
     
    @lignes = ("");
    open(MAILDAT, "<inbox.dat") || die "fichier avec E-Mails non trouvé\n";
    while(<MAILDAT>)
    {
      push(@lignes,$_);
    }
    close(MAILDAT);
    for(@lignes)
    {
      if(/HTML/)
      {
        print $_;
      }
    }

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre du Club Avatar de blacksnake
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 69
    Points
    69
    Par défaut
    Pour supprimer des doublons il y a ceci par ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my %seen    = ();
    @unic = grep { !$seen{$_}++ } @global;

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Je ne comprend aps bien ta syntaxe blacksnake.
    J'ais essayer de la facon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/perl
     
     
    $file='user_adresseip'; # Ouverture du fichier en lecture
    open(FICH, $file) or die "Ouverture de  $file impossible : $!\n";
     
    my @lines;
     
    while(<FICH>)
     
    	{
    	push(@lines,$_); #On remplit un tableau avec le contenu du fichier
    	}
     
    close(FICH); # Fermeture du fichier en lecture
     
    $fileout='>user_adresseip'; # Ouverture du fichier en écriture
    open(FICHOUT, $file) or die "Ouverture de  $fileout impossible : $!\n";
     
    for($i=0;$i<$#lines;$i++) # Boucle parcourant chaque case du tableau
     
    {	
    	if($lines[$i-1]==$lines[$i]) # Si la contenu de la case précédent est égale au contenu de la case actuelle
     
    	{
    	$lines[$i-1]=""; #On vide la case précédente
    	print(FICHOUT "$lines[$i]");#On écrit dans le fichier la case actuelle
    	}
     
    }
    close(FICH);#Fermeture du fichier en écriture
    Mais cela n'as aucun effet sur mon fichier a traiter.

  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    deja tu as un # dans la déclaration de ta boucle for

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Le # est volontaire :
    $#nom_tableau indique l'indice du dernier éléments du tableau.
    Je l'utilise ici donc comme élément de fin de ma boucle for

  7. #7
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    et ton teste if dans le for est incorrect pour effectuer des tests sur des lignes de caracteres il faut utilsier "eq"

    je te rappel que la commande perl -w tonfichier.pl permet d'afficher les warning , pour le debug c'estp lus facile

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  8. #8
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    avec ceci tu recupère les lignes en double dans le fichier résultat.txt , a toi de créer le fichier test.txt! chez omi ca marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!/usr/bin/perl
     
    $file='teste.txt'; # Ouverture du fichier en lecture
    open(FICH, $file) or die "Ouverture de  $file impossible : $!\n";
    my @lines;
     
    while(<FICH>)
     
    	{
    	push(@lines,$_); #On remplit un tableau avec le contenu du fichier
    	}
     
    close(FICH); # Fermeture du fichier en lecture
     
    $fileout='>resultat.txt'; # Ouverture du fichier en écriture
    open(FICHOUT, $fileout) or die "Ouverture de  $fileout impossible : $!\n";
     
    for($i=0;$i<$#lines;$i++) # Boucle parcourant chaque case du tableau
     
    {	
    	if($lines[$i-1] eq $lines[$i]) # Si la contenu de la case précédent est égale au contenu de la case actuelle
    	{
    		$lines[$i-1]=""; #On vide la case précédente
    		print(FICHOUT "$lines[$i]");#On écrit dans le fichier la case actuelle
    	}
     
    }
    close(FICH);#Fermeture du fichier en écriture

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Un perl -w m'as donné : " Filehandle FICHOUT opened only for input at Delete_doublon.pl line 27 "

    J'avais un erreur lors de la réouverture de mon fichier en plus de l'erreur que tu as souligné.
    Mon script marche mais que pour les 1er ligne voia un autre probléme

    Sinon j'ais une question mon script marche seulement si les lignes identiques se suivent auriez vous des iédées pour réaliser un script supprimant toutes les lignes identiques dans un fichier ? ? qu'elles se suivent ou non ?

  10. #10
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ton fichier $file est ouvert uniquement en lecture, vérifie bien avec les ">","<"

    car dans ton 2eme open tu appel $file et pas $fileout

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Oui c'est cette erreur que je parlais dans mon post précédent celle concernant l'ouverture de fichier.

    Maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $fileout='>user_adresseip'; # Ouverture du fichier en écriture
    open(FICHOUT, $fileout) or die "Ouverture de  $fileout impossible : $!\n";
    C'est correct
    Mais toujours que la premiére paires de lignes identiques de traitée

  12. #12
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    aide toi de la fonction grep comme le disais blacksnake, tu trouveras de la doc sur le net. si tu as bien compris le fonctionnement de la fonction grep et de la manipulation des fichiers et des chaines de caractere tu ne devrais plus avoir de probleme

    bon courage

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    D'accord merci pour tout , je ne le dirais jamais assez sur ce forum.
    Je vais étudier le fonctionement de la fonction grep et modifier mon script en conséquence.
    Je te tiendrais au courant de mes avancées.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    D'ans l'utilisation de la fonction grep c'est l'expression évaluer a chaque ligne du fichier que je ne voit )pas du tout comme la coder.
    Faudrait comparer le $_ du grep avec les lignes précédentes rentré dans un tableau ? ?
    Bref l'expression m'embrouille

  15. #15
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for($i=0;$i<$#lines;$i++) # Boucle parcourant chaque case du tableau
    {	
    	if($lines[$i-1] eq $lines[$i]) # Si la contenu de la case précédent est égale au contenu de la case actuelle
    	{
    		$lines[$i-1]=""; #On vide la case précédente
    		print(FICHOUT "$lines[$i]");#On écrit dans le fichier la case actuelle
    	}
    }
    Je vous signale qu'avec ce code vous avez déjà écrit la ligne $i-1 dans le fichier lorsque vous la supprimez....
    Un peu mieux serait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $last;
    for my $line (@lines) {
      print FICHOUT $line unless $line eq $last;
      $last = $line;
    }
    Mais Gad29 voulait carrément supprimer tous les doublons, pas seulement ceux qui se suivent. Il vaudrait mieux alors utiliser le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl
    use strict; use warnings;
    my @lines = <>;
    my %seen;
    print grep { not $seen{$_}++ } @lines;
    __END__
    A utiliser ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./delete_doublon.pl mon_fichier_en_entree.txt >resultat.txt
    --
    Jedaï

  16. #16
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Jedai c'est le Ronaldo du Perl on lui fait des passes et lui il finit le travail en beauté a chaque coup! trop fort ce jedai

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Voila à l'aide de grep cela marche du tonner et cela supprime toutes les paires de lignes identiques.
    Ais-je bien comprits l'utilisation du grep ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (FICHOUT grep { not $seen{$_}++ } @lines);
    Cette ligne écrit dans le fichier de FICHOUT toutes les lignes de @lines ne ressemblant pas a $seen{$_] qui est la valeur temporaire utilisé par grep quand il parcoutr le fichier liste ? ?
    Merci de me repondre

    Merci beaucoup a vous trois pour votre aide.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Lol Jim_Nastiq je pensait la même chose ce serait même un Pelé du Perl

    Ce que j'admire c'est que même avec le niveau qu'il à il prend bien le temp d'éxpliquer.
    Jedaï si tu n'est pas professeur de programmation songes-y
    Sur ce bon apetit.

  19. #19
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Gad29
    Voila à l'aide de grep cela marche du tonner et cela supprime toutes les paires de lignes identiques.
    Ais-je bien comprits l'utilisation du grep ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print (FICHOUT grep { not $seen{$_}++ } @lines);
    Cette ligne écrit dans le fichier de FICHOUT toutes les lignes de @lines ne ressemblant pas a $seen{$_] qui est la valeur temporaire utilisé par grep quand il parcoutr le fichier liste ? ?
    "grep BLOC @liste" filtre @liste : il ne renvoie que les éléments de @liste pour lesquels BLOC a renvoyé une valeur vraie. Dans BLOC, $_ est l'élément à examiner.

    Voici comment ce bout de code en particulier marche :
    %seen est un hash vide à l'origine. Lorsqu'on rencontre pour la première fois une string s dans @lines, $seen{$_}++ crée la paire de clé s et de valeur undef dans le hash $seen.
    ++ est l'opérateur dit de "postincrémentation", a++ retourne a, puis augmente a de 1.
    Ici $seen{$_}++ est undef++, donc undef est retourné, puis augmenté de 1. undef + 1 == 1 en Perl. Donc après $seen{$_}++, la valeur de $seen{$_} est 1. Mais le "not" devant reçoit undef (puisque a++ est une postincrémentation), or "not undef" est une valeur vraie (car undef est une valeur fausse).
    Donc la première fois qu'une string s est rencontré dans @lines, elle est conservée par le grep.
    Maintenant qu'arrive-t-il lorsqu'on retombe sur s une deuxième fois ?
    $seen{$_} existe déjà, et vaut 1. $seen{$_}++ retourne donc 1 et met $seen{$_} à 2.
    Donc la valeur retournée par le bloc est "not 1" qui est une valeur fausse (car 1 est une valeur vraie).
    Autrement dit, la deuxième fois qu'on rencontre une string, grep ne la conserve pas. De même pour les apparitions suivantes. Ce grep ne conserve que la première apparition d'une string donnée dans @lines, il supprime les doublons !!

    Explicitement, ce qu'il fait est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my %seen;
    my @once;
    for my $line (@lines) {
      if( not exists $seen{$line} ) {
        push @once, $line;
        $seen{$line} = 1;
      } else {
        $seen{$line} += 1;
      }
    }
    # @once est maintenant @lines débarrassé des doublons
    Mais c'est nettement plus concis avec le grep()...

    Remarquez que cette exemple illustre une technique courante en Perl : utiliser un hash pour manipuler un tableau. On peut supprimer les doublons, compter la fréquence des éléments, trouver les éléments communs à deux tableaux, les supprimer de l'un...

    --
    Jedaï

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Merci pour ces expliquations je tag ce sujet en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer une ligne entière dans un fichier
    Par divad dans le forum Langage
    Réponses: 4
    Dernier message: 22/07/2010, 22h42
  2. supprimer une ligne spécifié dans un fichier
    Par ouadie99 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/03/2008, 15h25
  3. Supprimer ligne blanche dans un fichier texte
    Par willytito dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/11/2007, 15h52
  4. Réponses: 4
    Dernier message: 26/07/2007, 11h35
  5. Réponses: 2
    Dernier message: 18/05/2006, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo