comment convertir du texte en numérique

comment convertir du texte en numérique - Perl - Programmation

Marsh Posté le 26-10-2005 à 11:19:37    

comment convertir une chaine en numeric en perl ?
l'execution ne marche pas
#programme principal
 
$texte = "1233a";
$texte = remplace_car($texte, ",","\." );
 
if (verifier_nombre($texte)) {print (" ok" );}
 
pour verifier que le texte est un nombre
sub verifier_nombre{
     local($texte) = @_;
     $texte =(numeric) $texte;
     if ($texte =~ /[+-]?(\d+\.\d+|\d+\.|\.\d+)|\d+/){
     print $texte;
     print "\n";
     print " est un nombre";
     print "\n";  
     return(1);
     }  
        else {  
      print $texte;
      print "\n";
      print "ce n'est pas un nombre";
      return(0);
       }
}


Message édité par may17 le 26-10-2005 à 11:50:09
Reply

Marsh Posté le 26-10-2005 à 11:19:37   

Reply

Marsh Posté le 26-10-2005 à 11:41:23    

Les titres en majuscule sont interdits par la charte du forum, tu devrais l'éditer.
 
Sinon, pour répondre à ta question, les conversions sont normalement automatiques. Que souhaites-tu faire exactement ?

Reply

Marsh Posté le 26-10-2005 à 19:26:27    

Hmm ca ressemble pas trop à du perl ca!
on ne peut pas faire de casting en perl (ton "$texte=(numerci)$texte" ).
 
Sinon effectivement si tu veux tester q'une chaine corespond bien entierement à un nombre tu peux utiliser une regexp, ou plus simplement ce module:
http://search.cpan.org/~chocolate/ [...] Numeric.pm

Reply

Marsh Posté le 26-10-2005 à 19:28:01    

et ta fonction "remplace_car" fait un peu peur !
tu sais en perl ca peut s'impelmenter comme ca: $text =~ s/,/\./g;

Reply

Marsh Posté le 27-10-2005 à 16:45:55    

En Perl, les chaines et les nombres c'est la meme chose a partir du moment ou la chaine represente un nombre. Dans ce cas la variable est interpretee comme du texte ou comme un nombre, suivant le contexte.

Reply

Marsh Posté le 27-10-2005 à 18:18:09    

matafan a écrit :

a partir du moment ou la chaine represente un nombre.


oui, et c'est justement ce que cette personne veut savoir.
par exemple "4564a" sera interpreté comme le chiffre 4564 en contexte de numerique, mais cette personne voudrait rejetter cette chaine

Reply

Marsh Posté le 27-10-2005 à 20:40:38    

Dans ce cas tu peux faire simplement :

if ($i*1 eq $i) {print "Number\n"} else {print "NaN\n"}


 
Edit : faudrait faire quelque chose pour les \, c'est penible. Enfin bon y'a un \ devans, les n, quoi.


Message édité par matafan le 27-10-2005 à 20:42:51
Reply

Marsh Posté le 28-10-2005 à 21:23:14    

ouai pas mal comme idée! simple et propre
reste à voir si il veut etretolérant aux +, "," à la place de ".", "." pour separer les milliers, espaces,etc...

Reply

Marsh Posté le 30-10-2005 à 11:52:09    

ta fonction verifier_nombre peut se faire avec une regex :
 
sub verifier_nbre
{
     my $arg = shift;
     return $arg=~/^(\d+)\.?(\d*)$/;
}


Message édité par couak le 30-10-2005 à 11:53:18
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed