cmd sort [ Perl] - Perl - Programmation
Marsh Posté le 14-04-2003 à 22:29:37
salut  
 
si je me souviens ya une fonction qui s'appel exec()  ou un truc du style, regarde dans la doc 
Marsh Posté le 15-04-2003 à 08:14:17
| vfqs a écrit : Slt all!  | 
 
 
A ma connaissance, ce n'est pas possible de faire ca directement avec le sort. Donc il faut d'abord rendre les elements uniques puis les trier. 
 
Voila un bout de code qui fait ca. 
 
| Code : 
 | 
Marsh Posté le 15-04-2003 à 11:24:14
SteF_DOBERMANN: Merci pour l'infos, mais après test exec est similaire à system.  
 
 
phoenix35: En gros c un peu comme une boucle "for" ton bout de code ? 
 
En tout cas ca fonctionne. Est ce plus rapide qu'une boucle for ?
Marsh Posté le 15-04-2003 à 11:45:38
| vfqs a écrit : SteF_DOBERMANN: Merci pour l'infos, mais après test exec est similaire à system.  | 
 
J'avoue le map fait un peu comme une boucle for  
  
mais en beaucoup plus rapide. 
Marsh Posté le 15-04-2003 à 12:10:35
| phoenix35 a écrit :   | 
Effectivement, c plus rapide j'ai gagné 20% de temps de traiement. un grand merci   
 
Marsh Posté le 15-04-2003 à 13:50:08
à noter ausi que sort ne trie pas en ordre alphanumérique, il est un peu bizarre!!
Marsh Posté le 15-04-2003 à 14:04:30
| arghbis a écrit : à noter ausi que sort ne trie pas en ordre alphanumérique, il est un peu bizarre!!  | 
 
 
Ah ? Pourtant d'apres la doc (perldoc -f sort), quand on ne donne pas de fonction ou block de tri, il utilise la comaparison standard des chaines ? 
A part en cas d'utilisation de "use locale;" ou la je suppose qu'il se debrouille avec les lettres accentuees, mais j'ai la flemme d'aller lire la doc. Qui a le courage ? Moi je digere... 
 
 
Marsh Posté le 15-04-2003 à 14:08:06
ben écoute, d'après mon expérience, il trie comme ça : 
- en entrée : 1, 2, 3, 4, 10, 100, 1000 
- en sortie : 1, 10, 100, 1000, 2, 3, 4 
 
sinon, faut que tu fasses une fonctions tri : 
sub tri { 
$a<=>$b; 
} 
 
ou $b<=>$a pour du décroissant 
 
 
et tu l'utilise comme ça par exemple : 
foreach my $a (sort tri(keys(%hash))) { 
... 
} 
 
voilà
Marsh Posté le 16-04-2003 à 08:23:24
| arghbis a écrit : ben écoute, d'après mon expérience, il trie comme ça :  | 
 
 
  Ben ca c'est normal comme resultat de tri pour du tri alphanumerique ! Dans alphanumerique, i, ya d'abord alpha. Lorsqu'on compare 2 chaines, dix > Douze > 9 > 2000 > 10
 Ben ca c'est normal comme resultat de tri pour du tri alphanumerique ! Dans alphanumerique, i, ya d'abord alpha. Lorsqu'on compare 2 chaines, dix > Douze > 9 > 2000 > 10 
 
Sinon pour ton exemple de tri, n'utilises pas de fonction mais un block si tu veux que ca aille plus vite (d'apres la doc de sort): 
| Code : 
 | 
Marsh Posté le 16-04-2003 à 11:24:15
ben autant pour moi, mais qd je veux trier ces nombres, de manière naive je m'attends à ce qu'ils soient dans l'ordre voulu! donc, je disais ça au cas où ... le coup de ton bloc, c bien mais bon si tu utilise 50 fois le tri, ça fait bcp de répétitions
Marsh Posté le 16-04-2003 à 11:36:07
| arghbis a écrit : ben autant pour moi, mais qd je veux trier ces nombres, de manière naive je m'attends à ce qu'ils soient dans l'ordre voulu! donc, je disais ça au cas où ... le coup de ton bloc, c bien mais bon si tu utilise 50 fois le tri, ça fait bcp de répétitions  | 
 
Je suis pas expert en Byte-code perl, mais a mon avis, le block une fois compile ne doit pas prendre trop de place. 
Mais si ca t'embette trop, dans ce cas tu fais ta fonction au niveau au-dessus: 
| Code : 
 | 
 
si tes tableaux ne sont pas trop gros ! sinon tu dois commencer a utiliser des references a l'appel et pour le resultat et ca devient lourd. 
C'est pour ca, je prefere mettre le block a chaque fois avec un appel direct a sort. 
Mais ce n'est qu'un avis tres personnel.
Marsh Posté le 14-04-2003 à 19:38:29
Slt all! 
 

Est-il possible à la cmd sort de perl de s'éxécuter comme "sort -u" sous shell Unix ?
Ou une cmd similaire. mais pas de boucle, car trop long. ni de cmd system.
Merci d'avance pour vos réponses.