Traitement de fichier
abdou3058
-
-
-
bonjour tous le monde
j'ai un fichier.txt qui contien mes sequence d'ADN , je voudrais faire un programme en perl pour me traiter les séquences dans mon fichier mais j'arrive bien à ouvrir le fichir en mode lecture , ce que je veux c'est comment déclarer ma variable qui contient 1000 séquences puis manipuler chaque sequence , merci d'avance
j'ai un fichier.txt qui contien mes sequence d'ADN , je voudrais faire un programme en perl pour me traiter les séquences dans mon fichier mais j'arrive bien à ouvrir le fichir en mode lecture , ce que je veux c'est comment déclarer ma variable qui contient 1000 séquences puis manipuler chaque sequence , merci d'avance
A voir également:
- Traitement de fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
5 réponses
Salut abdou3058,
Le mieux c'est que tu donnes un exemple de ce que contient le fichier et de ce que tu veux en faire, et que tu montres le code de ce que tu as déjà fait.
Dal
Le mieux c'est que tu donnes un exemple de ce que contient le fichier et de ce que tu veux en faire, et que tu montres le code de ce que tu as déjà fait.
Dal
bonsoir ; je voudrai en faite faire une table de hash entre la premiere et la derniere colonne , pour ensuite classer les valeurs de derniere colonne par ordre décroissant et prendre les 5 meilleurs résultats et à la fin afficher les 5 lignes correspondantes aux meilleurs valeurs de score (la derniere colonne )
clone1_deb chu:CHU_0158 71.16 267 77 0 2 802 545 811 5e-108 392
clone1_deb chu:CHU_0158 100.00 10 0 0 810 839 821 830 5e-108 24.3
clone1_deb chu:CHU_0158 32.76 116 71 1 221 547 18 133 1e-09 66.6
clone1_deb chu:CHU_0158 40.74 54 31 1 8 166 888 941 2e-04 49.7
clone1_deb bth:BT_0578 69.06 265 82 0 8 802 546 810 2e-101 372
clone1_deb bth:BT_0578 33.94 109 65 2 224 529 12 120 3e-08 62.4
clone1_deb bth:BT_0578 40.91 44 26 0 8 139 887 930 0.003 45.4
clone1_deb bth:BT_0578 35.00 40 26 0 671 790 411 450 2.0 36.2
clone1_deb bfs:BF2634 68.68 265 83 0 8 802 541 805 6e-100 366
clone1_deb bfs:BF2634 33.94 109 65 2 224 529 7 115 3e-08 62.4
clone1_deb bfs:BF2634 38.33 60 36 1 8 184 882 941 9e-04 47.4
clone1_deb chu:CHU_0158 71.16 267 77 0 2 802 545 811 5e-108 392
clone1_deb chu:CHU_0158 100.00 10 0 0 810 839 821 830 5e-108 24.3
clone1_deb chu:CHU_0158 32.76 116 71 1 221 547 18 133 1e-09 66.6
clone1_deb chu:CHU_0158 40.74 54 31 1 8 166 888 941 2e-04 49.7
clone1_deb bth:BT_0578 69.06 265 82 0 8 802 546 810 2e-101 372
clone1_deb bth:BT_0578 33.94 109 65 2 224 529 12 120 3e-08 62.4
clone1_deb bth:BT_0578 40.91 44 26 0 8 139 887 930 0.003 45.4
clone1_deb bth:BT_0578 35.00 40 26 0 671 790 411 450 2.0 36.2
clone1_deb bfs:BF2634 68.68 265 83 0 8 802 541 805 6e-100 366
clone1_deb bfs:BF2634 33.94 109 65 2 224 529 7 115 3e-08 62.4
clone1_deb bfs:BF2634 38.33 60 36 1 8 184 882 941 9e-04 47.4
Salut
Sur la base du jeu de données que tu indiques dans ton message, voilà comment créer en Perl un hash de arrays bidimensionnels, contenant en clef un identifiant tiré de tes "premières colonnes", et en valeurs le nombre en dernière colonne sur lequel tu veux trier par clef et la ligne complète de sorte à pouvoir l'afficher.
cela donne :
(comme indiqué précédemment, sur ce test, ton jeu de données comporte moins de 5 lignes par catégorie)
L'expressivité et la puissance de Perl permettent de faire cela en une 20aine de lignes.
Tu peux potasser perldoc si tu ne comprends pas tout.
et notamment https://perldoc.perl.org/perldsc#Declaration-of-a-HASH-OF-ARRAYS et https://perldoc.perl.org/perlretut sur les expressions rationnelles.
Si tu as des questions sur ce code après avoir compulsé la doc, exprime toi :-)
Dal
Sur la base du jeu de données que tu indiques dans ton message, voilà comment créer en Perl un hash de arrays bidimensionnels, contenant en clef un identifiant tiré de tes "premières colonnes", et en valeurs le nombre en dernière colonne sur lequel tu veux trier par clef et la ligne complète de sorte à pouvoir l'afficher.
#!/usr/bin/perl use strict; use warnings; use List::Util qw[min]; my %hash; # fabriquer le hash de arrays while (my $st = <DATA>) { chomp $st; if ($st =~ m/.*:([^\s]+).* (\d+)/) { print "données capturées : $1 - $2\n"; push ( @{ $hash {$1} }, [$2, $st]); } else { print "Erreur: format incorrect à la ligne\n$st\n"; } } # pour chaque clef, déterminer les $n valeurs du tableau # les plus grandes my $n = 5; foreach my $key (keys %hash) { my $nb = scalar @{ $hash {$key} }; print "le tableau sous la clef $key contient $nb valeurs\n"; print "les $n lignes ayant les plus grandes valeurs sont :\n"; my @sorted = reverse sort { $a->[0] <=> $b->[0] } @{ $hash {$key} }; foreach my $st (@sorted[0..(min($n,$nb)-1)]) { print "$st->[1]\n"; } } __DATA__ clone1_deb chu:CHU_0158 100.00 10 0 0 810 839 821 830 5e-108 24.3 clone1_deb bth:BT_0578 33.94 109 65 2 224 529 12 120 3e-08 62.4 clone1_deb chu:CHU_0158 71.16 267 77 0 2 802 545 811 5e-108 392 clone1_deb chu:CHU_0158 40.74 54 31 1 8 166 888 941 2e-04 49.7 clone1_deb chu:CHU_0158 32.76 116 71 1 221 547 18 133 1e-09 66.6 clone1_deb bfs:BF2634 33.94 109 65 2 224 529 7 115 3e-08 62.4 clone1_deb bth:BT_0578 69.06 265 82 0 8 802 546 810 2e-101 372 clone1_deb bth:BT_0578 35.00 40 26 0 671 790 411 450 2.0 36.2 clone1_deb bth:BT_0578 40.91 44 26 0 8 139 887 930 0.003 45.4 clone1_deb bfs:BF2634 38.33 60 36 1 8 184 882 941 9e-04 47.4 clone1_deb bfs:BF2634 68.68 265 83 0 8 802 541 805 6e-100 366
cela donne :
$ ./abdou3058.pl
données capturées : CHU_0158 - 24
données capturées : BT_0578 - 62
données capturées : CHU_0158 - 392
données capturées : CHU_0158 - 49
données capturées : CHU_0158 - 66
données capturées : BF2634 - 62
données capturées : BT_0578 - 372
données capturées : BT_0578 - 36
données capturées : BT_0578 - 45
données capturées : BF2634 - 47
données capturées : BF2634 - 366
le tableau sous la clef CHU_0158 contient 4 valeurs
les 5 lignes ayant les plus grandes valeurs sont :
clone1_deb chu:CHU_0158 71.16 267 77 0 2 802 545 811 5e-108 392
clone1_deb chu:CHU_0158 32.76 116 71 1 221 547 18 133 1e-09 66.6
clone1_deb chu:CHU_0158 40.74 54 31 1 8 166 888 941 2e-04 49.7
clone1_deb chu:CHU_0158 100.00 10 0 0 810 839 821 830 5e-108 24.3
le tableau sous la clef BF2634 contient 3 valeurs
les 5 lignes ayant les plus grandes valeurs sont :
clone1_deb bfs:BF2634 68.68 265 83 0 8 802 541 805 6e-100 366
clone1_deb bfs:BF2634 33.94 109 65 2 224 529 7 115 3e-08 62.4
clone1_deb bfs:BF2634 38.33 60 36 1 8 184 882 941 9e-04 47.4
le tableau sous la clef BT_0578 contient 4 valeurs
les 5 lignes ayant les plus grandes valeurs sont :
clone1_deb bth:BT_0578 69.06 265 82 0 8 802 546 810 2e-101 372
clone1_deb bth:BT_0578 33.94 109 65 2 224 529 12 120 3e-08 62.4
clone1_deb bth:BT_0578 40.91 44 26 0 8 139 887 930 0.003 45.4
clone1_deb bth:BT_0578 35.00 40 26 0 671 790 411 450 2.0 36.2
(comme indiqué précédemment, sur ce test, ton jeu de données comporte moins de 5 lignes par catégorie)
L'expressivité et la puissance de Perl permettent de faire cela en une 20aine de lignes.
Tu peux potasser perldoc si tu ne comprends pas tout.
et notamment https://perldoc.perl.org/perldsc#Declaration-of-a-HASH-OF-ARRAYS et https://perldoc.perl.org/perlretut sur les expressions rationnelles.
Si tu as des questions sur ce code après avoir compulsé la doc, exprime toi :-)
Dal
merci beaucoup de votre aide
ca a fonctionné parfaitement votre code
mon ordi a arreté de fonctionné j'ai pas pu l'essayé avant
j'ai une autre question par apport à un autre jeux de donnée je vais la poster dans le forum
bonne soirée merci ,
ca a fonctionné parfaitement votre code
mon ordi a arreté de fonctionné j'ai pas pu l'essayé avant
j'ai une autre question par apport à un autre jeux de donnée je vais la poster dans le forum
bonne soirée merci ,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour
ah ouii j'ai bien compris l'exemple et le code et ca a marché je me rappelle plus de ce que j'ai fait exactement j'ai pas suivi tous les détail du code mais ca m'as donnée une idées pour commencé c'est juste que j'ai perdu le code ds l'ordinateur qui a arreté de fonctionner , là j'ai un autre jeu de donnée j'ai lancé une question dans le site
merci pour votre aide , merci infiniment
ah ouii j'ai bien compris l'exemple et le code et ca a marché je me rappelle plus de ce que j'ai fait exactement j'ai pas suivi tous les détail du code mais ca m'as donnée une idées pour commencé c'est juste que j'ai perdu le code ds l'ordinateur qui a arreté de fonctionner , là j'ai un autre jeu de donnée j'ai lancé une question dans le site
merci pour votre aide , merci infiniment