Salut,
je souhaite trier les lignes d'un fichier de la forme (ligne formée d'1 chaîne en début à ne pas modifier suivie de un ou plusieurs entiers, le tout séparé par des tabulations ) :
AcrR 484843
Ada 2308425 4411838 2145562
AdiY 4338102
AlpA 3651558
AppY 1036963
AraC 70048 70387 2980204 1984151 411705
ArcA 4213057 1036963 582904 328558 770678 450834 3681077 4028561 953689 1686401 1684612 3126036 2350667 753691 1194346 3775026 3381903 2403092 754400 4098391
J'utilise une fonction de tri et je recopie le résultat dans un autre fichier mais j'obtiens :
AcrR 484843
Ada 2145562
2308425 4411838
AdiY 4338102
AlpA 3651558
AppY 1036963
AraC 70048 70387 411705
1984151 2980204
ArcA 328558 450834 582904 753691 754400 770678 953689 1036963 1194346 1684612 1686401 2350667 2403092 3126036 3381903 3681077 3775026 4028561 4098391
Des sauts de ligne apparaissent au beau milieu de mes lignes suivi d'une tabulation; de plus, les lignes ne comportant que 2 éléments à trier se retrouvent suivies d'une ligne vide !!!
Si quelqu'un pouvait me défaire de cette m...
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 sub trierFTPosK12Txt { my ($fichierIn) = @_; if (!-e $fichierIn) { die "fichier $fichierIn introuvable !"; } open(FICRES,">FTTargPosTrie.txt") or die "Ouverture impossible du fichier $fichierOut en ecriture"; # Ouverture du fichier open(DONNEE,"<$fichierIn") or die "Ouverture impossible du fichier $fichierIn en lecture"; while(<DONNEE>) { # Récupération de la ligne courante my @tab = split "\t"; if (scalar @tab <= 2) { # Pour les lignes ne contenant qu'un seul entier, on ne fait pas de tri $, = "\t"; print FICRES @tab; #print FICRES "\n"; apparemment il vaut mieux ne pas le mettre sinon une ligne vide après } else { print FICRES $tab[0]; print FICRES "\t"; # On enlève la chaine située au premier indice de la liste shift(@tab) ; # Tri du tableau selon l'ordre croissant @tab = sort tri_num @tab; $, = "\t"; print FICRES @tab; print FICRES "\n"; } } close DONNEE; close FICRES; } # Fonction de tri d'un tableau d'entiers pour la fonction trierFTPosK12Txt sub tri_num ($$){ my ($gauche,$droit) = @_; return $gauche <=> $droit; }
Partager