problème de manipulation/réorganisation de fichiers - Perl - Programmation
Marsh Posté le 08-04-2013 à 21:11:57
Je procéderais ainsi:
Code :
|
C'est du code relativement générique, qui peut marcher avec plus de 2 fichiers en entrée le cas échéant.
Je crée un hash, %data, dont les clés sont les séquences GTAC... lues (la seule hypothèse, ici, est que chaque séquence n'est présente qu'une fois par fichier, mais sinon, cela n'aurait guère de sens), et pour chaque clé, la valeur est un tableau ($data{$sequence} = [];) dont la i-ème entrée est la valeur de compte lue dans le (i+1)-ième fichier ($data{$sequence}->[$index] = $compte;) (ou undef, si la séquence n'est pas dans le fichier).
A toi d'adapter selon tes besoins, je te donnerais plus d'explications si nécessaire.
A+,
Marsh Posté le 06-04-2013 à 22:26:02
Bonsoir à tous!
je viens solliciter vos lumières au sujet d'un script Perl visant la manipulation de fichiers. Alors voilà ce que j'ai:
- deux fichiers comportant des lignes allant deux par deux, organisés comme ceci (même organisation pour les deux:
>1 count:272019
TACCTGGTTGATCCTGCCAG
>2 count:48613
TTTGGATTGAAGGGAGCTCTA
>3 count:15422
TTTGGATTGAAGGGAGCTCT
>4 count:9818
TTGGACTGAAGGGAGCT
>5 count:8783
TTGGACTGAAGGGAGCTCCCT
- ces deux fichiers ne sont pas triés dans le même ordre, mais il devraient avoir des séquences (la deuxième ligne de chaque bloc de deux lignes qui se retrouvent dans les deux fichiers
Passons maintenant à ce que j'aimerais faire:
- trier ces fichiers afin que les séquences qu'ils contiennent soient dans le même ordre
- éditer la ligne de nom (la première ligne de chaque bloc de deux lignes) afin de ne garder que la valeur située après "count:" (NOTE: pour une même séquence cette valeur est différente entre le fichier 1 et le fichier 2). Pour les séquences n'apparaissant que dans l'un des fichiers, il faudrait que dans celui où elles n'apparaissent pas leur valeur de count soit égale à zéro.
Ce que j'ai fait jusque là: j'ai réussi à trier toutes mes séquences de façon à ce qu'elles soient dans le même ordre dans mes deux fichiers (j'ai créé deux nouveaux fichiers, afin de ne pas altérer mes fichiers d'origine). Mon code est comme ceci:
Bon alors, comme je l'ai dit, ce code semble marcher. Cependant, mon problème est: je ne sais pas comment faire pour garder la valeur de count et qu'elle reste bien associée à la ligne à laquelle elle correspondait dans le fichier d'origine. Au début je voulais faire un $results{$count}=1, etc (comme pour la séquence), mais le problème est que je n'ai pas le même count dans le deux fichiers pour une même séquence, du coup, je suis perdu... Comme vous pouvez le voir par les lignes commentées que j'ai laissées dans mon code, j'avais aussi une idée d'y stocker dans un tableau, mais en fait, je ne vois pas comment spécifier que cette valeur doit rester associée à la séquence de la ligne suivante...
Je dois bien avouer être une énorme bille en hash et encore plus en hash de hash que je ne comprend absolument pas, bien que je lise cours et exemples, et donc un petit coup de main serait le bienvenu...
---------------
Je n'ai pas une case en moins, je commence juste à compter à partir de zéro