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 :

Fusion résultat à partir de deux fichiers


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 157
    Points : 80
    Points
    80
    Par défaut Fusion résultat à partir de deux fichiers
    Bonsoir à tous

    je veux faire un programme qui lit deux fichiers qui ont ce format:

    1 Q0 DerOpthalmologe/80950033 0 1.0 TF_IDF
    1 Q0 DerRadiologe/80380710 1 0.9586699756125027 TF_IDF
    1 Q0 MonatsschriftKinderheilkunde/01480013 2 0.9586699756125027 TF_IDF
    2 Q0 ZfuerKardiologie/90880788 0 1.0 TF_IDF
    2 Q0 DerChirurg/90701174 1 0.9177183904260889 TF_IDF
    2 Q0 DerUnfallchirurg/81010830 2 0.8655239936791111 TF_IDF
    .......

    je fais un split pour décomposer chaque ligne si je trouve que le premier chiffre est équivalent, je vérifie le champ 3 (exerOpthalmologe/80950033), s'il sont égaux, je fais une somme des champs Numéro 4 pour les deux lignes (des deux fichiers).
    Si la ligne n'a pas d'équivalent (champ 1 et 4), on l'écrit dans le fichier sortie résultat,

    Mon problème j'arrive à trouver les lignes dont le champs 1 et 4 sont équivalent, mais j'arrive pas à afficher les autres lignes, je peux les afficher plusiers fois à cause des boucles.
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    #!/usr/bin/perl
     
    print "bonjour\n";
    open(FIC, $ARGV[0]);
    open(FICC, $ARGV[1]);
     
      my @a = ();
      my @b = ();
      my $l=0;
      my $v=0;
      my $g=0;
     
     
    print "choisis un nom de fichier pour contenir le résultat\n";
     
     
    chomp(my $fic2=<STDIN>);
    open(FIC2, ">$fic2");
     
     
     
     
     
    #---------------------------------------------------
    # initialisation des variables
    #---------------------------------------------------
     
    $i=0;
    $j=0;
     
     
    while (<FICC>) {
    my $ligne=$_;
     
    $b[$i]=$ligne;
     
    # $b premier fichier et stockage dans une table
     
     
    $i++;
    }
     
     
     
     
    while (<FIC>) {
    my $ligne=$_;
     
    $a[$j]=$ligne;
     
     
    # $a lecture second fichier
     
    $j++;
    }
     
    foreach my $tab(@b){
     
     
     
     
    @aa=split(/\s/,$tab);
     
     
     
    foreach my $kh(@a){
     
    chomp($kh);
    @bb=split(/\s/,$kh);
     
    if($bb[0] eq $aa[0]){ 
     
     
    #comparer le premier champs pour les deu lignes des deux fichiers, si ils sont équivalent, je compare le champs numéro 4 et j'affiche les deux scores
     
     
    if($bb[2] eq $aa[2]){
    print FIC2 "$aa[0] $aa[2] $aa[4] $bb[4] \n";
     
    } else{print FIC2 "$kh ";}
     
     
     
     
     
     
     
     
     
     
    }
     
     
     
    }
     
     
     
    }
    le problème de ce code c'est que dès que je veux afficher les autres lignes, j'ai des problèmes
    Merci pour votre aide

  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
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Le plus simple est sans doute de consolider les données dans une structure de type hachage de hachage (en faisant les additions nécessaires au fur et à mesure), puis d'imprimer le contenu du hachage.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 157
    Points : 80
    Points
    80
    Par défaut
    merci j'ai utilisé deux hash de hash

    voila la solution
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #!/usr/bin/perl
     
    print "bonjour\n";
    open(FIC, $ARGV[0]);
    open(FICC, $ARGV[1]);
     
      my @a = ();
      my @b = ();
      my $l=0;
      my $v=0;
      my $g=0;
    my $h=0;
    my $t=0;
    my $q=0;
    print "choisis un nom de fichier\n";
     
     
    chomp(my $fic2=<STDIN>);
    open(FIC2, ">$fic2");
     
    #print "choisis un nom de fichier pour la référence\n";
     
     
    #chomp(my $fic3=<STDIN>);
    #open(FIC3, ">$fic3");
     
     
    #---------------------------------------------------
    # initialisation des variables
    #---------------------------------------------------
     
    $i=0;
    $j=0;
    $u=0;
     
    while (<FIC>) {
    my $ligne=$_;
     
    @aa=split(/\s/,$ligne);
    $who = $aa[0];
     
     
            $key=$aa[2];
            $HoH{$who}{$key} = $aa[4];
     
     
    # $b premier fichier celui qui contient tt les SN
     
     
    $i++;
    }
     
    print $HoH{2}{"DerChirurg/80690854"};
     
    while (<FICC>) {
    my $ligne=$_;
     
    @aa=split(/\s/,$ligne);
    $who = $aa[0];
     
     
            $key=$aa[2];
            $HoH2{$who}{$key} = $aa[4];
     
     
    # $b premier fichier celui qui contient tt les SN
     
     
    $i++;
    }
    print "\n";
     
     
    foreach my $k (  keys %HoH2){
    #print "$k: ";
    $i=0;
    foreach ( keys%{HoH2{$k}}){
     
    $l= (0.1*$HoH2{$k}{$_})+ (0.9*$HoH{$k}{$_});
    print FIC2 ("$k Q0 $_ $i $l TF_IDF \n");
    $i++;
    #print "$kk \n";
    }}

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/09/2013, 14h46
  2. [WD15] Problème de sélection à partir de deux fichiers
    Par Totik dans le forum WinDev
    Réponses: 11
    Dernier message: 24/05/2012, 18h41
  3. Fusion de plus de deux fichiers .txt
    Par lilly74 dans le forum R
    Réponses: 1
    Dernier message: 24/06/2010, 13h09
  4. faire une liste a partir de deux fichiers txt
    Par finelady dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/04/2008, 10h39
  5. fusion de deux fichiers EXCEL dans un 3ième
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2007, 18h59

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