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

  FORUM HardWare.fr
  Programmation
  Perl

  comparaison de chaine mais de nombre :-/

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparaison de chaine mais de nombre :-/

n°705740
brolouille
Posté le 22-04-2004 à 10:52:28  profilanswer
 

Je voudrais comparer deux chaines de caracteres en tant que nombre mais lorque j'utilise le "<=>" il me dit que ce n'est pas numérique (normal vu que c'est une chaine). Mais lorsque j'utilise la comparaison avec "cmp", il ne compare pas correctement.
 
Explicitons :
 
Ca c'est mon code:

Code :
  1. my $i;
  2. my @tab=("1.2.1","1.2.3","1.2.10","1.2.2","1.2.21" );
  3. my @tri = sort fct @tab;
  4. sub fct {$a cmp $b;}
  5. for ($i=0;$i<5;$i++) {
  6.     print $tri[$i]."\n";
  7. }


 
A l'affichage on, obtient:

Code :
  1. 1.2.1
  2. 1.2.10
  3. 1.2.2
  4. 1.2.21
  5. 1.2.3


 
Alors que j'aimerais obtenir:

Code :
  1. 1.2.1
  2. 1.2.2
  3. 1.2.3
  4. 1.2.10
  5. 1.2.21


 
Avez vous une astuce ?
 
Merci d'avance !  :jap:

mood
Publicité
Posté le 22-04-2004 à 10:52:28  profilanswer
 

n°707852
pospos
Posté le 24-04-2004 à 22:08:29  profilanswer
 

Perl sait convertir automatiquement une chaine en un nombre si ce string "ressemble" à un nombre, et donc il saura utiliser un comparateur <=> sur des chaines representant des nombres, mais ca n'est pas le cas ici: "1.2.1" ca ne ressemble pas à un nombre...
 
Par contre tu peux customiser un peu ta fonction de comparaison pour que ca marche:
 

Code :
  1. my @tab=("1.2.1","1.2.3","1.2.10","1.2.2","1.2.21" );
  2. my @tri = sort fct @tab;
  3. sub fct {sprintf("%02d%02d%02d", split(/\./, $a)) <=> sprintf("%02d%02d%02d", split(/\./, $b))}
  4. print join("\n", @tri);


 
ici on supprime les "." en remplacant chaque partie par un nombre à deux chiffres
par exemple 1.2.10 => 010210
 
et ensuite on peut faire la comparaison (avec cmp ou <=> d'ailleurs)


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

  comparaison de chaine mais de nombre :-/

 

Sujets relatifs
nombre de connexion sur un serveur avec api ou wmi ??nombre d'appel de méthodes sous la forme a().b()..z()
comment tester une chaine de caractèreProbleme de transfert de chaîne de caractere vers BDD.HELP!!!!
[C]recupérer des caractères dans une chaine[ SQL ] Convertir une chaine de char en int -> Convert ?
[C++] nombre de décimaux dans un double qu'on écrit dans un fichiersql calculer le nombre de jours dans un mois
Windev : reconnaitre le retour chariot dans une chaîne[Regexp]Exclure une chaine d'une expression
Plus de sujets relatifs à : comparaison de chaine mais de nombre :-/


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