Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2314 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [ Perl] cmd sort

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ Perl] cmd sort

n°360834
vfqs
Posté le 14-04-2003 à 19:38:29  profilanswer
 

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. :)

mood
Publicité
Posté le 14-04-2003 à 19:38:29  profilanswer
 

n°360988
stef_dober​mann
Personne n'est parfait ...
Posté le 14-04-2003 à 22:29:37  profilanswer
 

salut :hello:
si je me souviens ya une fonction qui s'appel exec()  ou un truc du style, regarde dans la doc ;)


---------------
Tout à commencé par un rêve...
n°361133
phoenix35
Posté le 15-04-2003 à 08:14:17  profilanswer
 

vfqs a écrit :

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. :)


 
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 :
  1. my @list = qw!Note that if you re stuck on Microsoft, no solution to this vexing issue is even possible.  Even if Perl were to emulate fork, you d still be hosed, because Microsoft gives no argc/argv-style API.!;
  2. my %seen;
  3. map { $seen{$_}++; } @list;           # on elimine les doublons
  4. my @result = sort keys %seen;         # on trie
  5. print join(":", @result), "\n";

n°361434
vfqs
Posté le 15-04-2003 à 11:24:14  profilanswer
 

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 ?


Message édité par vfqs le 15-04-2003 à 11:32:54
n°361483
phoenix35
Posté le 15-04-2003 à 11:45:38  profilanswer
 

vfqs a écrit :

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 ?


J'avoue le map fait un peu comme une boucle for :ange:  
mais en beaucoup plus rapide.

n°361533
vfqs
Posté le 15-04-2003 à 12:10:35  profilanswer
 

phoenix35 a écrit :


J'avoue le map fait un peu comme une boucle for :ange:  
mais en beaucoup plus rapide.
 

Effectivement, c plus rapide j'ai gagné 20% de temps de traiement. un grand merci  :jap:

n°361712
arghbis
salops de dauphins
Posté le 15-04-2003 à 13:50:08  profilanswer
 

à noter ausi que sort ne trie pas en ordre alphanumérique, il est un peu bizarre!!

n°361751
phoenix35
Posté le 15-04-2003 à 14:04:30  profilanswer
 

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...
 
 

n°361761
arghbis
salops de dauphins
Posté le 15-04-2003 à 14:08:06  profilanswer
 

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à

n°362679
phoenix35
Posté le 16-04-2003 à 08:23:24  profilanswer
 

arghbis a écrit :

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à


 
 :lol: 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 :
  1. foreach my $a (sort { $a <=> $b } keys(%hash) ) {
  2. ...
  3. }


Message édité par phoenix35 le 16-04-2003 à 08:26:19
mood
Publicité
Posté le 16-04-2003 à 08:23:24  profilanswer
 

n°362979
arghbis
salops de dauphins
Posté le 16-04-2003 à 11:24:15  profilanswer
 

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

n°363005
phoenix35
Posté le 16-04-2003 à 11:36:07  profilanswer
 

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 :
  1. sub tri { return sort { $a <=> $b } @_; }
  2. @resultat = tri @list;


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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [ Perl] cmd sort

 

Sujets relatifs
[PERL] Couleurs à l'affichage[php ou perl] petite bd dans 1 fichier
chemin vers perl automatique pour fichier exécutableInstaller un module CPAN à active perl sous win 2000
Perl et AccessArrêt du script Perl
[PERL] Problême de data sharing entre plusieurs threads...Entrer une chaine de caractere en mode INVISIBLE [PERL]
[perl] perl avec mySQL ??[perl] Sort by date
Plus de sujets relatifs à : [ Perl] cmd sort


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR