Bonjour,
J'ai des éléments et je dois faire en sorte que ceux-ci ne se recouvrent pas. J'entend par là que :

Si des éléments ont la même position de début, alors je dois prendre le plus grand
Exemple : toto20 8 10 et toto 8 18 On garde toto 8 18
Si des éléments ont la même position de fin, alors je dois prendre le plus grand.
Exemple toto79 98 110 et toto79 100 110 et toto79 105 110 On garde toto 98 110
Si on a des élément qui sont inclus dans l'un des plus grand ci-dessus on ne le garde pas
Exemple : toto20 5 15 on ne le garde pas car est inclus dans toto20 8 18 de même que toto 8 10
type de fichier
toto79 3 110 . 7 14
toto79 3 110 . 98 110
toto20 5 50 . 8 18
toto20 5 50 . 8 10
toto79 3 110 . 100 110
toto79 3 110 . 28 78
toto20 5 50 . 30 40
toto79 3 110 . 105 110
Résultat attendus
toto20 5 50 . 8 18
toto20 5 50 . 30 40
toto79 3 110 . 28 78
toto79 3 110 . 7 14
toto79 3 110 . 98 110


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
 
 
my %test=();
 
while(my $ligne = <IN>){
        chomp $ligne;
my ($f0,$f01,$f02,$f03, $f2,$f3)= (split /\t/, $ligne);
my $all="$f2"."\t"."$f3";
#même début, mais fin différente
if ( !exists $test{$all} or (($test{$f2}{'deb'} == $f2 and $test{$f2}{'fin'} > $f3)) ){
$test{$f2}{'deb'}=$f2;
		$test{$f2}{'fin'} = $f3;
                $test{$f2}{'element'}=$f1;
 
        }
#même fin, mais début différente
}
close(IN);
foreach my $val (keys %test){
        print "$test{$val}{'element'}\t$test{$val}{'deb'}\t$test{$val}{'fin'}\n";
}
Quelqu'un peux aider?