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 ligne de 2 fichiers


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Par défaut Comparaison de ligne de 2 fichiers
    Hello à tous,

    Je ne dois pas être au bon endroit (encore...désolé) y a qq chose qui m'échappe avec la navigation...

    Mon problème est le suivant :

    j'ai 2 fichiers ayant une liste de nombre
    je souhaiterais "printer" seulement les nombres différent /manquant

    fichier 1 (1, 2, 5)
    fichier 2 (1,2,3,4,5)

    soluce : 3 4

    ?? voilà

    je sais que c'est pas très compliqué, mais j'ai un petit cerveau
    ps : G pas mal cherché !! pour agraver mon cas

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    S'agit-il d'un exercice juste pour apprendre ?

    Ouvre le premier fichier. Pour chaque ligne lue, enregistre la en clé d'une table associative. Ferme le fichier. Ouvre le deuxième fichier. Pour chaque ligne lue, affiche là si elle ne figure pas dans la table associative. Ferme le fichier.

    Tu dois avoir tout ça dans la FAQ.

  3. #3
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Oups, tu aurais du poster dans Langage ; les modos vont déplacer ton message.

  4. #4
    Membre éclairé Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Par défaut comparaison de 2 fichiers
    Citation Envoyé par iblis Voir le message
    Oups, tu aurais du poster dans Langage ; les modos vont déplacer ton message.
    Merci !

    je regarde ça...

    ps : j'apprends tant bien que mal, seul à part le forum !! merci vous tous.

  5. #5
    Membre éclairé Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Par défaut comparaison de 2 fichiers
    Citation Envoyé par iblis Voir le message
    S'agit-il d'un exercice juste pour apprendre ?

    Ouvre le premier fichier. Pour chaque ligne lue, enregistre la en clé d'une table associative. Ferme le fichier. Ouvre le deuxième fichier. Pour chaque ligne lue, affiche là si elle ne figure pas dans la table associative. Ferme le fichier.

    Tu dois avoir tout ça dans la FAQ.
    J'ai essayé ça...Mais bon

    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
     
    #!/usr/local/bin/perl   -w
     
    use strict;
    use warnings;
     
    open UN, "un.txt";
    open DEUX,"<deux.txt";
     
    my $line;
    my $line2;
    my %tab = ();
     
    while ($line2 = <DEUX>)
            {
            chomp $line2;
            %tab = $line2;
            }
     
     
    while ($line = <UN>)
            {
            chomp $line;
            unless (exists $line{@tab})
                    {
                    print $line2;
                    }
                    else
                    {
                    print 'fin';
                    }
            }
    close DEUX;
    close UN;

  6. #6
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    C'est pas mal mais il y manque l'idée principale (les fautes de syntaxe se corrigent vite) : lire le premier fichier en entier dans une table associative ; le fermer ; puis ouvrir et lire le deuxième.

    Je te montre un façon (à peu près) propre de procéder.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
     
    my %lines;
     
    open my $fh, '<', 'file1' or die "$!";
    while (<$fh>) { $lines{$_} = 1 }
    close $fh;
     
    open $fh, '<', 'file2' or die "$!";
    while (<$fh>) { print unless $lines{$_} }
    close $fh;
    A partir de Perl 5.8 (et peut-être même un peu avant), il est possible et conseillé de passer les filehandle dans des varialbes scalaires et d'utiliser la syntaxe à trois arguments pour open.

    La syntaxe pour accéder aux valeurs d'une table associative est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my %table;
    $table{'clé'} = 'valeur';
    my $val = $table{'clé'};
    Dans le boucle while avec l'opérateur <FILEHANDLE>, la ligne lue est passé par défaut dans $_. Tu peux bien sûr écrire, plus lisiblement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (my $data = <$fh>) { $lines{$data} = 1 }

  7. #7
    Membre éclairé Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Par défaut comparaison de 2 fichiers
    Merci Beaucoup,

    C vraiment cool.

    je vais pouvoir bosser correctement.



    Merci ++

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/04/2015, 14h24
  2. Comparaison de ligne dans un fichier texte
    Par babynewton dans le forum MATLAB
    Réponses: 21
    Dernier message: 13/02/2012, 19h09
  3. Réponses: 2
    Dernier message: 15/07/2011, 23h57
  4. Réponses: 9
    Dernier message: 22/01/2011, 13h56
  5. Comparaison de 2 lignes d'un fichier
    Par nikhun dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 18/10/2006, 14h00

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