Bonjour,
je viens vous voir pour un problème de remplissage de tableau. Je m'explique: j'ai un fichier contenant un entête sur une ligne et une séquence sur la seconde ligne, le tout répété de très très nombreuses fois... un extrait:
>2B_1 count:759
NNNNNNNNNNNNNNNNNNNNN
>2B_2 count:262
NNNNNNNNNNNNNNNNNNNNN
>2B_3 count:123
NNNNNNNNNNNNNNNNNNNN
>2B_4 count:78
NNNNNNNNNNNNNNNNNNNNN
>2B_5 count:65
NNNNNNNNNNNNNNNN
Ce que je voudrais: récupérer dans un tableau le nombre de la première ligne (exemple 759 pour la première ligne) et la longueur de la séquence de la seconde ligne (exemple 21 pour le première seconde ligne).
J'ai donc fait un petit bout de 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
 
use warnings;
use strict;
my $fastq="C:/Users/fichierentrée";
open(IN, "$fastq");
my $tableau="C:/Users/fichiersortie";
open(SEQ, ">$tableau");
my @tab;
my $i=0;
while (my $seq = <IN>)
	{
		chomp $seq;
		for (++$i % 2 != 0)
		{
			@tab = split (/:/, $seq);
		}
		for (++$i % 2 == 0)
		{
			$tab[2]=length($seq);
		}
		print SEQ "$tab[1];$tab[2]\n";
	}
close (IN);
close (SEQ);
Problème: quand je lance le script il me marque "use of unitialized value $tab[1] in concaténation or string line 20". Quant à mon fichier de sortie il ne marche bien entendu pas, et me sort quelquechose comme ça:
759;23
;21
262;23
;21
123;23
;20
78;22
;21
65;22
;20
Le premier nombre de la première ligne est bon (759 par exemple), par contre, je ne vois pas ce qu'est le second nombre (23) car il y a 21 bases, pas 23. Et après il me met le bon nombre de bases sur la seconde ligne, après un ";"...
Si quelqu'un pouvait donc me donner un petit coup de main, j'apprécierai beaucoup! Merci d'avance!
PS: est-ce qu'il est possible dans mon tableau final de regrouper les séquences par longueur en additionnant les nombres de la première colonne?