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);
Partager