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

Bioinformatique Perl Discussion :

algo-> associer un couple à


Sujet :

Bioinformatique Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 algo-> associer un couple à
    Bonjour,

    j'ai un fichier fam.txt contenant les familles et nom d'enfant et un autre fichier enfant.txt contenant les couples d'enfants
    (chaque famille a 2 enfants; cela fonctionne par couple)
    Je souhaiterai obtenir un fichier final qui m'indique le nom de la famille et le couple d'enfants associés.

    fam.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dupond    jules
    martin     fred
    brun	      anna
    martin     felix
    minh	      emma
    dupond     james
    brun         jules
    duvernet   alice
    enfant.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jules      james
    felix      fred
    anna      alice
    fichier final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jules      james
    felix      fred
    anna      alice
    Mon problème au niveau de l'algo, je ne vois pas comment construire mon script.

  2. #2
    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
    Voiçi mon 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
     
    my $fichier = 'fam.txt';
    open my $fh, '<', $fichier or die "Impossible de lire le fichier $fichier\n";
     
     
    my %hash=();
     
    while(my $ligne = <$fh>){
            chomp $ligne;
            my ($famille,$gene) = split "\t", $ligne;
            $hash{$gene}=$famille;
    }
     
    open ALL, "enfant.txt" or die $!;
    while(my $ligne = <ALL>){
            chomp $ligne;
     
    	if($ligne =~ /(.*)\t(.*)$/){
    		if (exists $hash{$1}){
                    	print "$hash{$1}\t$ligne\n";
    		}
    		else{
    			$l++;
    			#print "$gene\n";
    		}
    	}
    }
    J'obtiens pour mon fichier final:
    brun jules james
    martin felix fred
    brun anna alice

    Or anna est fille de la famille brun et alice de duvernet!!!

  3. #3
    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,

    tes données en entrée ne sont pas cohérentes (si du moins j'ai bien compris).

    Le fichier enfant.txt contient la ligne:
    ce qui indique, d 'après ce que tu dis, qu'elles sont sœurs, mais elles ne portent pas le même nom de famille. C'est donc incohérent. Même si ton programme est juste, il va forcément sortir une incohérence, sur le nom de famille s'il donne la priorité aux fratries du fichier enfant.txt, ou sur les fratries s'ils donne la priorité aux noms de famille.

    En fait, les informations du premier fichier sont suffisantes à elles seules pour résoudre le problème, le fichier enfant.txt est parfaitement inutile (et il est même nuisible s'il n'est pas cohérent).

    Tu as juste besoin de créer à partir du premier fichier un hash avec comme clé le nom de famille et comme valeur la liste des enfants pour résoudre le problème à partir du premier fichier, sans utiliser le second.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    du même avis que LoLo car je me suis posé les même questions !

  5. #5
    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
    Bonjour,

    Merci pour vos réponses.

    "En fait, les informations du premier fichier sont suffisantes à elles seules pour résoudre le problème, le fichier enfant.txt est parfaitement inutile (et il est même nuisible s'il n'est pas cohérent).

    Tu as juste besoin de créer à partir du premier fichier un hash avec comme clé le nom de famille et comme valeur la liste des enfants pour résoudre le problème à partir du premier fichier, sans utiliser le second. "

    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
     
    my $fichier = 'fam.txt';
    open my $fh, '<', $fichier or die "Impossible de lire le fichier $fichier\n";
     
     
    my %hash=();
    my @list=();
     
    while(my $ligne = <$fh>){
            chomp $ligne;
            my ($famille,$gene) = split "\t", $ligne;
     
            if (exists $hash{$famille}){
                     push(@list, $hash{$famille},$gene);
                     $hash{$famille}= $hash{$famille}." ".$gene;#remplir le hash
                     next;
    	}
            $hash{$famille}=$gene;
    }
    # affichage
    foreach my $t (keys %hash){
            print  "clé: $t\tvaleur: $hash{$t}\n";#verif
    }

  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
    Je vais essayer de m'expliquer autrement

    J'ai 2 fichiers
    fichier 1 : Pour chaque famille j'ai une liste de gène présent (chaque gène est séparé par une tabulation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fam1   ptv5 ptv10rd_6 ptv468 rm63 rm69
    fam5   ptv20 ptv16  rm6
    fam3    ptv15 ptv 6 ptv9 rm52 rm123
    fichier 2 : un couple de gène
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ptv5 rm69
    ptv3 rm5
    je souhaiterai pour chaque couple de gène de mon fichier 2, savoir si ils appartiennent tous deux à la même famille et donc obtenir un fichier final contenant les couples de gènes présent dans la même famille

    fichier final:

Discussions similaires

  1. Associer un résultat d'un calcul à des couples de valeurs
    Par wahouuu0 dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 04/05/2015, 13h43
  2. Association de couple pour création de ligne unique
    Par MDsas dans le forum SAS Base
    Réponses: 10
    Dernier message: 02/02/2012, 14h33
  3. Réponses: 12
    Dernier message: 14/10/2011, 21h52
  4. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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