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 :

comparaison de fichiers


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut comparaison de fichiers
    Bonjour je dois faire un script pour comparer deux fichiers (fichier1 et fichier 2),

    fichier1
    ML001 V
    ML002 E
    ML003 V

    fichier 2
    ML002 bbb
    ML003 ccc
    ML009 iii

    il doit ressortir un fichier3
    ML002 bbb E
    ML003 ccc V
    ML009 iii


    A partir du fichier 2, on doit récupérer l'info contenu dans le fichier 1 (fusion des résultats) et construire ainsi le fichier 3

    Je n'arrive pas à définir une deuxième colonne de mon hash genre
    #$hash_new {$p} [2] = $hash{$p};


    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
     
    my %h = ();
    open FILE, "fichier2" or die $!;
    while (my $ligne = <FILE>){
    	if($ligne =~ /(.*)\t(.*)/){
    		$h {$1}= $2;
    	}
    }
     
     
    my %hash = ();
    open FILE, "fichier1" or die $!;
    while (my $ligne = <FILE>){
    	if($ligne =~ /(.*)\t(.*)/){
    		$hash {$1}= $2;
    	}
    }
     
     
    my %hash_new = ();
     
    foreach my $p (keys %h){
    	foreach my $t (keys %hash){
    	        if (exists $hash_new{$p}) {#si la clé existe pas
    			next;
    		}
    		$hash_new {$p}= $h{$p};#remplir le hash	
     
    	}
     
    }
     
    foreach my $u (keys %hash_new){
       print  "$u\t$hash{$u}\n";#verif
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    a priori, si j'ai bien compris, un seul hash simple suffit:

    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
    my %hash;
    open my $FILE, "<", "fichier1" or die "impossible d'ouvrir fichier 1 $!";
    while (my $line = <$FILE>){
         chomp $line;
         my ($first, $second) = split / /, $line;
         $hash{$first}= $second;
    }
    close $FILE;
    open my $FILE2, "<", "fichier2" or die "impossible d'ouvrir fichier 1 $!";
    while (my $line = <$FILE2>){
         chomp $line;
         my ($first, undef) = split / /, $line;
         print $line, $hash{$first}, "\n" if exists $hash{$first};
    }
    close $FILE2

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    D'après l'exemple, il semble que :
    - si l'élément n'existe pas dans le fichier 2, on n'affiche rien dans le fichier résultat
    - si l'élément n'existe pas dans le fichier 1, on affiche dans le résultat l'élément du fichier 2 seul.

    Je crois que ton script fait l'inverse pour ces deux cas de figure.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Je n'imprime rien si la ligne n'existe pas dans le ficher 2.

    S'il faut toujours imprimer les lignes 2, alors, petit changement au deuxième while:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    open my $FILE2, "<", "fichier2" or die "impossible d'ouvrir fichier 1 $!";
    while (my $line = <$FILE2>){
         chomp $line;
         my ($first, undef) = split / /, $line;
         if exists $hash{$first} {
               print $line, $hash{$first}, "\n";
         } else { 
              print $line, "\n";
         }
    }
    close $FILE2

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Je n'imprime rien si la ligne n'existe pas dans le ficher 2.
    Exact, mon interpréteur perl cervical n'est pas très performant...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Par défaut
    Génial merci

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

Discussions similaires

  1. Comparaison de fichiers text
    Par mick84m dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/07/2005, 16h48
  2. [Debutant(e)]comparaison de fichier : imprimer
    Par demostene dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 06/07/2004, 10h43
  3. Comparaison de fichiers Word
    Par Zelphalya dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2003, 15h15
  4. [langage] Comparaison de fichiers
    Par Jibees dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2003, 16h27
  5. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49

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