gilou Modérateur Modosaurus Rex | Bonjour,
   J'ai mis vos données dans un fichier nommé couples .txt, et ecrit le script couples.pl suivant:
  
  Code :
 #!/usr/bin/perl use strict; use warnings; use autodie  qw(open close);    # open/close succeed or die   # fichier de données my $filename = "couples.txt"; my @datas; open my $fh,  '<',  $filename;  while (<$fh> ) {   if (/^(?:.+)-(\d+)\tAster-(\d+)$/o) {     push @datas,  [$_, $ 1, $ 2,  0];    } }     @datas =  sort { $a-> [1] <=>  $b-> [1] or $a-> [2] <=>  $b-> [2] } @datas;  my $current; foreach (@datas) {   if ($current) {     if (($_->[1] == ($current->[1] + 1))      && (($_->[2] == ($current->[2] + 1)) || ($_->[2] == ($current->[2] - 1)))) {       $current->[3] = 1;       $_->[3] = 1;     }   }   $current = $_; }   my @result; foreach (@datas) {   if ($_->[3]) {   } }   
 
  |  
 
 Sur vos données initiales, ça me donne ceci:
  C169v2-00156    Aster-03172
 C169v2-00157    Aster-03173
 C169v2-00194    Aster-03056
 C169v2-00195    Aster-03055
 C169v2-00365    Aster-01092
 C169v2-00366    Aster-01093
 C169v2-00367    Aster-01094
 C169v2-00444    Aster-05312
 C169v2-00445    Aster-05313
 C169v2-00446    Aster-06835
 C169v2-00447    Aster-06836
 C169v2-00604    Aster-06241
 C169v2-00605    Aster-06242
 C169v2-00624    Aster-06810
 C169v2-00625    Aster-06811
 C169v2-00994    Aster-07502
 C169v2-00995    Aster-07503
 C169v2-01147    Aster-04997
 C169v2-01148    Aster-04996
 C169v2-02608    Aster-00719
 C169v2-02609    Aster-00720
 C169v2-02880    Aster-09326
 C169v2-02881    Aster-09327
 C169v2-02882    Aster-09328
 C169v2-02883    Aster-09329
 C169v2-03065    Aster-05822
 C169v2-03066    Aster-05821
 C169v2-03565    Aster-07197
 C169v2-03566    Aster-07198
 C169v2-03710    Aster-02870
 C169v2-03711    Aster-02869
 C169v2-03712    Aster-02868
 C169v2-04030    Aster-04240
 C169v2-04031    Aster-04241
 C169v2-04634    Aster-01994
 C169v2-04635    Aster-01993
 C169v2-04677    Aster-07022
 C169v2-04678    Aster-07023
 C169v2-05018    Aster-04700
 C169v2-05019    Aster-04699
 C169v2-05054    Aster-06213
 C169v2-05055    Aster-06214
 C169v2-05056    Aster-06212
 C169v2-05057    Aster-06211
 C169v2-05077    Aster-05947
 C169v2-05078    Aster-05946
 C169v2-05245    Aster-01477
 C169v2-05246    Aster-01478
 C169v2-05264    Aster-06056
 C169v2-05265    Aster-06055
 C169v2-06011    Aster-00116
 C169v2-06012    Aster-00117
 C169v2-06080    Aster-00115
 C169v2-06081    Aster-00114
 C169v2-06088    Aster-00184
 C169v2-06089    Aster-00185
 C169v2-06885    Aster-03281
 C169v2-06886    Aster-03282
 C169v2-07283    Aster-00641
 C169v2-07284    Aster-00642
 C169v2-07458    Aster-04764
 C169v2-07459    Aster-04765
 C169v2-08190    Aster-09000
 C169v2-08191    Aster-08999
 C169v2-09366    Aster-03745
 C169v2-09367    Aster-03744  |  
 
 Comment l'algo marche:
 Pour chaque ligne lue, je parse avec une expression régulière ad-hoc et construis un tableau anonyme a 4 entrées, ma première entrée est la ligne lue (moins son retour chariot final), la seconde la valeur numérique après le premier - et avant la tabulation, la troisième entrée la valeur numérique après le second - et avant la fin de ligne, et la 4e entrée, 0, pour un indicateur positionné plus tard.
 exemple: ligne lue C169v2-09367    Aster-03744 ==> tableau anonyme [C169v2-09367    Aster-03744, 09367, 03744, 0]
 Je range ce tableau anonyme dans un tableau global @datas (ie chaque élément de @datas est une référence à un tableau anonyme ainsi créé).
 Ensuite je trie @datas suivant les deux valeurs numériques des tableaux anonymes qui constituent ses éléments (ie on ordonne @datas par rapport a la valeur associée à C169v2, et en cas d'égalité, par rapport à la valeur qui suit  Aster).
 Ensuite, je parcours @datas (trié) et je teste si la valeur pour C169v2 de deux éléments successifs se suit (et est croissante, puisque j'ai trié). Si oui je teste si le valeur pour Aster se suit (dans un sens ou l'autre). Si oui, je positionne l'indicateur (le 4e champ du tableau anonyme) a 1 pour ces deux éléments successifs.
 Enfin, je parcours @datas, et crée un tableau @result dont le contenu est le premier champ du tableau anonyme (donc ce qui a été lu dans le fichier) pour les éléments dont l'indicateur a été positionné à 1.
   A+,
     ---------------
			 There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
    |