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 :

réordonner une matrice (Parseur)


Sujet :

Langage Perl

  1. #21
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne comprends plus vraiment :
    - le tableau se trouvant après la liste n'est-il plus la matrice à ré-ordonner ?
    - la matrice à ordonner se trouverait-elle dans un autre fichier ? de quel type ? comment sont organisées les données dans cet autre fichier ? ...

    Bref, qu'attends-tu de plus que le script actuel ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  2. #22
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    je n'attends plus rien de ce script. Merci beaucoup.

    Vous m'avez posé la question sur ce que je voulais faire de plus concernant ce que j'ai posté tout au début (concernant l'ordre des lignes dans cette matrice) et je vous ai dis que j'ai changé d'avis; et qu'au lieu de changer l'ordre de cette matrice je vais changer l'ordre dans un autre tableau.

    Ce tableau est dans un autre fichier a part et n'a rien à voir avec ce que j'ai présenté jusqu'à maintenant. Un tableau qui fournit des information sur les différentes séquences et que je veux présenter dans le même ordre que la matrice obtenu à la fin de ce script (qui est le même ordre du fichier d'entrée)

    Juste pour vous monter comment est ce tableau je vous donne un exemple sur le même jeu de données(je note encore que ce tableau se trouve dans un autre fichier).
    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
     
    Seq	logLong	freq
    CparCP02	2,45	125
    HjCP01	4,69	136
    GclCP02	3,97	152
    FoCP01	4,23	179
    VdaCP02	2,99	148
    VaaCP02	3,35	201
    HjCP02	4,02	167
    GmoCP01	3,71	192
    TviCP01	2,89	165
     
    que je veux ordonner selon cette liste là qu'on a afficher au début du script:
     
    [
                 'CparCP02',
                 'HjCP01',
                 'GclCP02',
                 'FoCP01',
                 'VdaCP02',
                 'VaaCP02',
                 'HjCP02',
                 'GmoCP01',
                 'TviCP01'
               ],
    Merci et Bonne journée

  3. #23
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    OK, bonne journée.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #24
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    j'ai modifié le script de tel façon à lui fournir le fichier directement.

    j'ai également supprimé EXPECTED et REF. Chose qui devrait pas influer sur notre script.

    et en l’exécutant sans les 3 lignes. je n'ai eu aucune erreur (erreur non apparente !!!)

    et en gardant les 3 dernière ligne pour voir si j'obtiens le même résultat j'ai eu cette errer:
    $mafft = [];

    Can't use an undefined value as an ARRAY reference at reorder.pl line 16, <$MAFFT> line 1.
    reorder.pl est le nom du parseur

    et e ne comprends pas pourquoi il concidère la ligne 1 (line 1) vue que nous avons ignoré les 3 premières lignes !!!

    voici les modification que j'ai exécuté et vous pouvez voir que je n'ai pas apporté de grandes modifications !!!
    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(each_array pairwise);
    use Data::Dumper;
     
    my $mafft = "fasta.fa.hat2";
     
     
    sub print_mafft {
      my ($table, $col) = @_;
     
      my @col_names = $col ? @$col : @{$table->[0]};
      say join "\t", ".", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say join "\t", $line_name, map $line->{$_} // $table->[1]->{$_}->{$line_name} // "0", @col_names;
      }
    }
     
     
    # Parsing de $mafft
    open my $MAFFT, "<", \$mafft or die "Can't read variable \$mafft: $!";
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my @lines;
    our ($a, $b);
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        @lines = @{$mafft[0]} if !@lines;
        my $line_name = shift @lines;
        chomp($line);
        my @columns = split /\s+/, $line;
        $mafft[1]->{$line_name} = { pairwise { defined $b ? ($a, $b) : () } @lines, @columns };
      }
    }
    say Data::Dumper->Dump([\@mafft], [qw($mafft)]);
    print_mafft(\@mafft);
    print_mafft(\@mafft, [qw(CparCP02 FoCP01 GmoCP01 GclCP02 HjCP01 HjCP02 TviCP01 VaaCP02 VdaCP02)]);

  5. #25
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Le script est écrit pour lire le fichier d'entrée depuis une variable ($mafft) et non pas depuis un fichier sur le disque.

    Or, tu as modifié la variable $mafft en remplaçant le contenu du fichier par son nom.
    Il faut donc faire évoluer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $MAFFT, "<", \$mafft or die "Can't read variable \$mafft: $!";
    ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $MAFFT, "<", $mafft or die "Can't read input file $mafft: $!";
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  6. #26
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour la réponse;Effectivement j'ai fait ce que vous m'avez demandé de faire et j'ai obtenu ce que je voulais.

    J'ai ajouté aussi 2 nouveaux fichiers:
    un pour pouvoir enregistrer la sortie.
    et un autre pour afficher la liste des séquences afin de l'exploiter ailleurs.

    le soucis que j'ai c'est que le tableau de sortie est décalé !!!

    il y a une ligne qui est vide et qui décale tout le tableau et je ne sais pas comment est ce possible !!!
    voici le 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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(each_array pairwise);
    use Data::Dumper;
     
    my $mafft = "fasta.fa.hat2";
     
    my $fic="MAFFT.csv";
     
    my $list= "list.csv";
     
    sub print_mafft {
      my ($table, $col) = @_;
     
      my @col_names = $col ? @$col : @{$table->[0]};
      say LIST join "\n", @col_names;
      say NEWFIC join "\t", "", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say NEWFIC join "\t", $line_name, map $line->{$_} // $table->[1]->{$_}->{$line_name} // "0", @col_names;
      }
    }
     
    # Parsing de $mafft
    open my $MAFFT, "<", $mafft or die "Can't read variable $mafft: $!";
     
    #Créer un fichier dans lequel j'enregistre la liste des séquences
    unless (open(LIST,">$list")){
    print "imppssioble d'ouvrir le fichier $fic\n";
    exit;
    }
     
    #crérer un nouveau fichier dans lequel j'enregistre la sortie
    unless (open(NEWFIC,">$fic")){
    print "imppssioble d'ouvrir le fichier $fic\n";
    exit;
    }
     
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my @lines;
    our ($a, $b);
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        @lines = @{$mafft[0]} if !@lines;
        my $line_name = shift @lines;
        chomp($line);
        my @columns = split /\s+/, $line;
        $mafft[1]->{$line_name} = { pairwise { defined $b ? ($a, $b) : () } @lines, @columns };
      }
    }
    print_mafft(\@mafft);
    et voilà ce que j'obtiens en sortie:
    CparCP02 HjCP01 GclCP02 FoCP01 VdaCP02 VaaCP02 HjCP02 GmoCP01 TviCP01
    CparCP02 0 0.333 0.335 0.363 0.282 0.281 0.326 0.363
    HjCP01 0 0.346 0.195 0.312 0.312 0.360 0.195
    GclCP02 0.333 0 0.386 0.300 0.300 0.251 0.386
    FoCP01 0.335 0.346 0 0.341 0.341 0.382 0.012
    VdaCP02 0.363 0.195 0.386 0 0.008 0.306 0.342
    VaaCP02 0.282 0.312 0.300 0.341 0 0.305 0.341
    HjCP02 0.281 0.312 0.300 0.341 0.008 0 0.385
    GmoCP01 0.326 0.360 0.251 0.382 0.306 0.305 0
    TviCP01 0.363 0.195 0.386 0.012 0.342 0.341 0.385 0
    et aussi j'obtien des erreurs et ces suerment que c'est erreurs qui sont la cause de se décalage.
    voici les erreurs:
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 13.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 14.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 15.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 16.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 17.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 18.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 19.
    Use of uninitialized value in anonymous hash ({}) at reorderF.pl line 60, <$MAFFT> line 20.
    Merci pour tout

  7. #27
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    la matrice n'apparait pas très claire voici une image qui montre le décalage.



    Cordialement

  8. #28
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Il me faudrait le fichier d'entrée (fasta.fa.hat2) pour pouvoir tester en réel.
    Cela dit, je doute pouvoir y parvenir avant lundi
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #29
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour, Vous pouvez avoir le fichier en suivant ce lien
    http://www.mediafire.com/?6fkzb6wepnyf0sx

    Sinon, je vais travailler en collant le fichier directement dans le script et j'essayerai de trouver la petite lacune.

    Merci et Bon Weekend

  10. #30
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour, Je voudrai vous faire connaitre que même en remplaçant l'exemple actuel par celui que j'envoie dans que dernier commentaire; La même chose se passe. La matrice est décalée et il y a toujours cette ligne diagonale vide qui apparait.

    Ce n'est pas vraiment pour ça que je veux vous communiquer mais plutôt un autre problème auquel je suis confronté.

    En passant à une échelle un peu plus grande (77 séquences) le programme n'écrit pas les distances de chaque séquence en une seule ligne mais il fait des retour à la ligne après chaque 12 valeurs. et donc je ne peux appliquer le parseur. Ce qui m'obligeait à le remettre les valeurs dans une seule ligne puis l'appliquer et ensuite modifier ce décalage.

    Est il possible de remettre les distances sur une seule ligne avant de procéder la suite?

    j'ai pensé à faire une boucle qui lit le nombre de séquence (à partir des noms de séquence qu'on récupère) puis lire les ligne l'une après l'autre et arrêter une fois qu'on attends (le nombre -1) puis on fait un retour à la ligne et on continue la lecture jusqu’à atteindre (le nombre -2) ainsi de suite jusqu'à la fin.

    je joins ici le nouveau exemple que je prends pour le visualiser.
    http://www.mediafire.com/?duldbkdl7gmdbxz

    Merci beaucoup.

  11. #31
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Never.Down Voir le message
    la matrice n'apparait pas très claire voici une image qui montre le décalage.



    Cordialement
    OK, je vois la même chose, je vais passer en debug pour corriger.
    Pourrais-tu me redonner ta version du script ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  12. #32
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    j'ai compris en faite d'ou viens le probleme. C'est qu'au début de la matrice il y a un espace et c'est cet espace qui provoque le décalage est donc la colonne vide au début de chaque ligne car en suppriment cette espace au début je n'ai aucun probleme.

    Par contre, le soucis reste quand même le format de la matrice en passant à une grande echelle. Pour l'instant je remets manuellement tout sur une seule ligne et je supprime manuelement aussi le premier espace et j'applique le script et il marche à merveille.

    je vous fais une copie du scripte que j'ai fais pour les 29 séquence et le fichier d'entrée je l'ai posté dans les anciens commentaire.

    Cordialement
    P.S: dans le scriipt les modification sont déjà faites.

    Voici le script:
    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use List::MoreUtils qw(each_array pairwise);
    use Data::Dumper;
     
    my $fic="MAFFT.csv";
     
    my $mafft = <<"MAFFT";
    1
    29
    0.995
       1. =8370|CgraCP01| [Colletotrichum_graminicola]|Ascomycota|Catalase_peroxidase|complete|
       2. =8362|CgraCP02| [Colletotrichum_graminicola]|Ascomycota|Catalase_peroxidase|complete|
       3. =3395|CparCP02| [Cryphonectria_parasitica]|Ascomycota|Catalase_peroxidase|complete|
       4. =5353|FoCP01| [Fusarium_oxysporum]|Ascomycota|Catalase_peroxidase|complete|
       5. =5228|FoCP02-1| [Fusarium_oxysporum]|Ascomycota|Catalase_peroxidase|complete|
       6. =5229|FoCP02-2| [Fusarium_oxysporum]|Ascomycota|Catalase_peroxidase|complete|
       7. =8380|GgrCP02| [Gaeumannomyces_graminis]|Ascomycota|Catalase_peroxidase|complete|
       8. =3415|GmoCP01| [Gibberella_moniliformis]|Ascomycota|Catalase_peroxidase|complete|
       9. =5355|GmoCP02| [Gibberella_moniliformis]|Ascomycota|Catalase_peroxidase|3_Introns|complete|
      10. =5354|GzCP01| [Gibberella_zeae]|Ascomycota|Catalase_peroxidase|complete|
      11. =2338|GzCP02| [Gibberella_zeae]|Ascomycota|Catalase_peroxidase|complete|
      12. =8363|GclCP02| [Grosmannia_clavigera]|Ascomycota|Catalase_peroxidase|complete|
      13. =2539|HjCP01| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
      14. =5459|HjCP02| [Hypocrea_jecorina]|Ascomycota|Catalase_peroxidase|complete|
      15. =5403|LmaCP01| [Leptosphaeria_maculans]|Ascomycota|Catalase_peroxidase|complete|
      16. =2337|MgrCP02| [Magnaporthe_grisea]|Ascomycota|Catalase_peroxidase|complete|
      17. =9926|MgCP02| [Mycosphaerella_graminicola]|Ascomycota|Catalase_peroxidase|complete|
      18. =8394|MpiCP01| [Mycosphaerella_pini]|Ascomycota|Catalase_peroxidase|complete|
      19. =5480|NhaeCP01| [Nectria_haematococca]|Ascomycota|Catalase_peroxidase|3_Introns|complete|
      20. =5374|NhaeCP02| [Nectria_haematococca]|Ascomycota|Catalase_peroxidase|complete|
      21. =6601|PEchCP01| [Penicillium_chrysogenum]|Ascomycota|Catalase_peroxidase|3_Introns|complete|
      22. =3449|PnoCP01| [Phaeosphaeria_nodorum]|Ascomycota|Catalase_peroxidase|complete|
      23. =5798|PtritCP01| [Pyrenophora_tritici-repentis]|Ascomycota|Catalase_peroxidase|complete|
      24. =5797|TatCP01| [Trichoderma_atroviride]|Ascomycota|Catalase_peroxidase|complete|
      25. =5800|TatCP02| [Trichoderma_atroviride]|Ascomycota|Catalase_peroxidase|complete|
      26. =5799|TviCP01| [Trichoderma_virens]|Ascomycota|Catalase_peroxidase|complete|
      27. =8376|TviCP02| [Trichoderma_virens]|Ascomycota|Catalase_peroxidase|complete|
      28. =7191|VaaCP02| [Verticillium_albo-atrum]|Ascomycota|Catalase_peroxidase|complete|
      29. =3414|VdaCP02| [Verticillium_dahliae]|Ascomycota|Catalase_peroxidase|complete|
    0.306 0.334 0.204 0.321 0.313 0.316 0.207 0.320 0.218 0.309 0.355 0.151 0.349 0.227 0.305 0.358 0.207 0.197 0.306 0.212 0.221 0.222 0.162 0.361 0.162 0.357 0.307 0.308
    0.285 0.331 0.195 0.192 0.236 0.331 0.200 0.328 0.198 0.316 0.310 0.323 0.328 0.155 0.328 0.320 0.321 0.184 0.310 0.343 0.328 0.311 0.336 0.306 0.322 0.209 0.211
    0.358 0.303 0.301 0.314 0.360 0.304 0.368 0.298 0.326 0.332 0.337 0.355 0.314 0.360 0.361 0.336 0.310 0.342 0.374 0.356 0.334 0.339 0.336 0.338 0.295 0.295
    0.345 0.344 0.354 0.012 0.349 0.094 0.338 0.387 0.197 0.387 0.271 0.343 0.391 0.237 0.130 0.342 0.234 0.266 0.272 0.195 0.389 0.207 0.379 0.340 0.341
    0.035 0.260 0.345 0.038 0.338 0.110 0.303 0.320 0.317 0.331 0.218 0.339 0.340 0.326 0.152 0.332 0.346 0.332 0.322 0.336 0.316 0.319 0.231 0.232
    0.257 0.344 0.014 0.337 0.101 0.296 0.317 0.309 0.326 0.207 0.332 0.337 0.331 0.140 0.327 0.342 0.325 0.318 0.329 0.316 0.312 0.231 0.234
    0.357 0.267 0.356 0.249 0.317 0.325 0.338 0.330 0.236 0.348 0.343 0.339 0.241 0.331 0.337 0.334 0.320 0.338 0.324 0.339 0.192 0.196
    0.349 0.096 0.338 0.389 0.197 0.388 0.273 0.344 0.392 0.238 0.126 0.342 0.234 0.266 0.272 0.192 0.391 0.205 0.381 0.342 0.343
    0.342 0.105 0.306 0.324 0.316 0.331 0.215 0.340 0.342 0.335 0.148 0.334 0.350 0.332 0.324 0.334 0.321 0.318 0.237 0.240
    0.336 0.391 0.200 0.394 0.261 0.348 0.391 0.236 0.136 0.345 0.237 0.253 0.260 0.197 0.398 0.205 0.395 0.343 0.346
    0.299 0.323 0.312 0.328 0.197 0.331 0.330 0.327 0.145 0.321 0.345 0.327 0.319 0.331 0.326 0.315 0.220 0.222
    0.353 0.254 0.369 0.305 0.275 0.360 0.354 0.309 0.352 0.382 0.379 0.347 0.264 0.347 0.255 0.305 0.305
    0.360 0.246 0.315 0.368 0.218 0.184 0.312 0.214 0.238 0.243 0.090 0.370 0.085 0.359 0.312 0.312
    0.372 0.334 0.258 0.364 0.362 0.319 0.354 0.392 0.382 0.351 0.103 0.347 0.057 0.327 0.328
    0.330 0.377 0.230 0.267 0.320 0.240 0.113 0.078 0.252 0.385 0.259 0.374 0.330 0.331
    0.335 0.325 0.327 0.200 0.324 0.336 0.324 0.319 0.341 0.318 0.336 0.216 0.219
    0.360 0.354 0.337 0.360 0.388 0.382 0.358 0.259 0.365 0.258 0.335 0.337
    0.229 0.331 0.227 0.210 0.220 0.227 0.368 0.223 0.366 0.335 0.335
    0.317 0.213 0.259 0.265 0.173 0.371 0.189 0.365 0.333 0.332
    0.310 0.340 0.322 0.306 0.337 0.312 0.320 0.200 0.205
    0.236 0.236 0.214 0.366 0.210 0.365 0.312 0.311
    0.109 0.245 0.398 0.248 0.394 0.340 0.341
    0.250 0.392 0.259 0.388 0.333 0.335
    0.361 0.087 0.350 0.310 0.309
    0.361 0.111 0.334 0.335
    0.350 0.310 0.310
    0.326 0.326
    0.008
    MAFFT
     
    my $expected = <<"EXPECTED";
    		CparCP02 FoCP01	GmoCP01	GclCP02	HjCP01	HjCP02	TviCP01	VaaCP02	VdaCP02
    CparCP02	0.000	0.363	0.363	0.335	0.333	0.326	0.334	0.281	0.282
      FoCP01	0.363	0.000	0.012	0.386	0.195	0.382	0.204	0.341	0.341
      GmoCP01	0.363	0.012	0.000	0.386	0.195	0.385	0.203	0.341	0.342
      GclCP02	0.363	0.386	0.386	0.000	0.346	0.251	0.337	0.300	0.300
      HjCP01	0.335	0.386	0.195	0.346	0.000	0.360	0.085	0.312	0.312
      HjCP02	0.333	0.195	0.195	0.251	0.360	0.000	0.345	0.305	0.306
      TviCP01	0.334	0.204	0.203	0.337	0.085	0.345	0.000	0.309	0.308
      VaaCP02	0.281	0.341	0.341	0.300	0.312	0.305	0.309	0.000	0.008
      VdaCP02	0.282	0.341	0.342	0.300	0.312	0.306	0.308	0.008	0.000
    EXPECTED
     
    my $ref = <<"REF";
    . p1 p2 p3
    p1 0
    p2 30 0
    p3 40 55 0
    REF
     
    sub print_mafft {
      my ($table, $col) = @_;
     
      my @col_names = $col ? @$col : @{$table->[0]};
      say NEWFIC join "\t", "", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say NEWFIC join "\t", $line_name, map $line->{$_} // $table->[1]->{$_}->{$line_name} // "0", @col_names;
      }
    }
     
     
     
    # Parsing de $mafft
    open my $MAFFT, "<", \$mafft or die "Can't read variable \$mafft: $!";
     
    #crérer un nouveau fichier dans lequel j'enregistre la sortie
    unless (open(NEWFIC,">$fic")){
    print "imppssioble d'ouvrir le fichier $fic\n";
    exit;
    }
     
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my @lines;
    our ($a, $b);
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        @lines = @{$mafft[0]} if !@lines;
        my $line_name = shift @lines;
        chomp($line);
        my @columns = split /\s+/, $line;
        $mafft[1]->{$line_name} = { pairwise { defined $b ? ($a, $b) : () } @lines, @columns };
      }
    }
    say Data::Dumper->Dump([\@mafft], [qw($mafft)]);
    print_mafft(\@mafft);

  13. #33
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour corriger l'histoire de l'espace, ajoute la ligne suivante :
    avant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        @lines = @{$mafft[0]} if !@lines;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  14. #34
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    j'ai ajouter ce que vous m'avez demander et j'ai testé et effectivement ça résoud le probleme.

    Ce qui reste maintenant c'est de réarranger les lignes et tout serait fini. Merci beaucoup.

    Cordialement

  15. #35
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Oui, je viens de voir : les lignes du tableau sont tronquées par des retours à la ligne.
    La politique de lecture doit donc évoluer : il faut lire autant de ligne que nécessaire pour obtenir le nombre de colonne attendues.

    J'y travaille, réponse ce soir ou demain... sous réserve.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  16. #36
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Oui c'est exactement ça... Est c'est un retour à la ligne après chaque 12 valeur. J'ai pris un autre exemple qui fais encore plus de séquence (82 seq) et c'est toujours la même chose (12valeurs et puis retour à la ligne) et c'est e que j'ai du remettre manuelement.

    Merci énormément. j'apprécie beaucoup votre aide.

    Cordialement

  17. #37
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Voici un nouveau script qui demande le nom du fichier fasta en paramètre d'appel :

    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
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use feature qw(:5.10);
    use Data::Dumper;
     
    my $mafft = $ARGV[0];
     
    sub print_mafft {
      my ($table, $col) = @_;
     
      my @col_names = $col ? @$col : @{$table->[0]};
      say join "\t", ".", @col_names;
      my @lines = @col_names;
      foreach my $line (@{$table->[1]}{@col_names}) {
        my $line_name = shift @lines;
        say join "\t", $line_name, map $line->{$_} // $table->[1]->{$_}->{$line_name} // "0", @col_names;
      }
    }
     
    # Representation en mémoire :
    # @mafft = ( [ qw(p3 p5 p2 p4 p1) ],
    #            { p3 => { p3 => 0 },
    #              p5 => { p3 => 12, p5 => 0 },
    #            ... } );
     
    # Parsing de $mafft
    open my $MAFFT, "<", $mafft or die "Can't read $mafft: $!";
    # Ignorer les 3 premières lignes
    <$MAFFT>;<$MAFFT>;<$MAFFT>;
    #my @col_names;
    my @mafft;
    my (@col_names, @col_matrix_line);
    my $current_line_name;
    while (defined(my $line = <$MAFFT>)) {
      if (my ($line_name) = $line =~ /\|\s*(.+?)\s*\|/) {
        # get a line name
        push @{$mafft[0]}, $line_name;
      }
      elsif (@{$mafft[0]}) {
        $line =~ s/^\s*//;
        # Initialize the column names vector
        @col_names = @{$mafft[0]} if !@col_names;
        # For each new matrix line, remove the first column name (distance from one to itself)
        if (!@col_matrix_line) {
          $current_line_name = shift @col_names;
          @col_matrix_line = @col_names;
        }
        chomp($line);
        my @columns = split /\s+/, $line;
        # get et remove the col_names which have to be updated with this line
        my @col_file_line = splice @col_matrix_line, 0, scalar(@columns);
        @{$mafft[1]->{$current_line_name}}{@col_file_line} = @columns;
      }
    }
    print_mafft(\@mafft);
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl matrix.pl 77fasta.fa.hat2 >MAFFT.csv
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  18. #38
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Alors ??? ça marche ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  19. #39
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    désolé de n'avoir pas pu me connecter et donc vous répondre avant.

    j'étais hospitalisée pour une intoxication. je suis sorti ce matin.

    Sinon, je viens de tester le parseur et je l'ai modifier de tel sorte que je lui fourni le fichier d'entrée et j’enregistre le résultat dans un autre fichier en sortie et il fonctionne à Merveille.

    je ne sais pas comment pourrais-je vous remercier.

    Merci Merci Merci et je suis désolé si je vous ai pris beaucoup de votre temps.

    Cordialement

  20. #40
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Never.Down Voir le message
    je suis désolé si je vous ai pris beaucoup de votre temps.
    Ne soit pas désolé : si j'ai le temps, je le fais toujours avec plaisir.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. référencement sur une matrice
    Par bni dans le forum C++
    Réponses: 3
    Dernier message: 24/03/2005, 00h06
  2. [PL/SQL] définir une matrice
    Par lalystar dans le forum Oracle
    Réponses: 5
    Dernier message: 22/02/2005, 15h27
  3. [JTable] remplir avec une matrice
    Par ybdz dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2004, 21h03
  4. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52
  5. Déclarer une matrice
    Par joy dans le forum C
    Réponses: 7
    Dernier message: 09/12/2002, 00h42

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