Bonjour,

Je ne vois pas comment concevoir mon algo, si vous pouvez m'orienter...

j'ai un fichier comme ceci séparé par des tabulations
seq1 id 2 27
seq1 h 2 11 #segment1
seq1 h 16 22 #segment2
seq1 h 25 27 #segment3
seq1 id 70 95
seq1 h 70 85 #segment1
seq1 h 90 95 #segment2

Au final, je voudrais calculer la taille entre chaque segment et obtenir le tableau en étape2

étape1:
seq1 16 12 #12=11+1
seq1 25 23 #23=22+1
seq1 70 86
seq1 90 96

étape2:
seq1 4 #16-12
seq1 2 #25-23
seq1 16
seq1 6

là ou je bloque, c'est considérer le fait que seq1 id 2 27 a 3 segments et seq1 id 70 95 a 2 segments (autrement dit c'est considérer chaque bloc de façon indépendante)

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
open (FINAL, "> final") or die("Impossible d'écrire dans le fichier $!");
open(S, "< source")or die("Impossible d'ouvrir le fichier $!");
my @tab=();
my $nb=0;
while( my $ligne=<S>){
    if($ligne =~ /id/){
     }
    else{
	if($ligne =~ /^seq([0-9]+)\t(.+)\t([0-9]+)\t([0-9]+)$/){
	        $nb++;
		my $debut=$3;
		my $fin=$4+1;
		$tab [$nb][1]=$1;
		$tab [$nb][2]=$debut;
		$tab [$nb][3]=$fin;
		print(FINAL "$1\t$debut\t$fin\n");
 
	}
    }
}
close (S);
close (FINAL);
 
 
open (FINAL, "< final") or die("Impossible d'ouvrir le fichier$!");
for(my $i=1; $i<=$nb; $i++){
    print("$tab[$i][1]\t $tab[$i][2]\t$tab[$i-1][3]\n");
}
close (FINAL);