Hello le monde , en laissant mon imagination de debutant reflechir je me suis amusez a ca j aimerai bien un avis ... y a t il un module qui permet de faire ca ? Auriez vous fait differement ... merci de votre attention
but : convertir une chaine numerique en son equivalent en chaine de caractere exemple "91" -= > "quatre vingt onze" pour le moment le script prend de 0 a 999 ...
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 
#!/usr/bin/perl
 %mot = (
 '0'                    =>              ' zero',
'1'                     =>              ' et un',
'2'                     =>              ' deux',
'3'                     =>              ' trois',
'4'                     =>              ' quatre',
'5'                     =>              ' cinq',
'6'                     =>              ' six',
'7'                     =>              ' sept',
'8'                     =>              ' huit',
'9'                     =>              ' neuf',
'10'                    =>             ' dix',
'11'                    =>	          ' onze',
'12'	         =>             ' douze',
'13'	         =>             ' treize',
'14'	         =>	          ' quatorze',
'15'	         =>	          ' quinze',
'16'	         =>	           ' seize',
'17'                    =>             ' dix sept' ,
'18'                    =>             ' dix huit' ,
'19'                    =>             ' dix neuf' ,
'20'	        	=>		' vingt',
'30'	        	=>		' trente',
'40'	        	=>		' quarante',
'50'	        	=>		' cinquante',
'70'	        	=>		' soixante dix',
'71'	        	=>		' soixante et onze',
'60'	        	=>		' soixante',
'80'	        	=>		' quatre-vingt',
'81'	        	=>		' quatre-vingt un',
'90'	        	=>		' quatre vingt-dix',
'cent'	        	=>		' cent',
'100'	        	=>		' cents',
'1000'	        	=>		' mille',
'1000a'	        	=>		' milles',
'1000000'	      	=>		' million',
'1000000a'	      	=>		' millions',
'1000000000'	=>		' milliard',
'1000000000a'	=>		' milliards',
);
 
$cpt = 0 ;
do
{
print "Saisir un nombre\n:>" ;
chomp  ( $g = <STDIN> ) ;
$greg = &convertir_chiffre ($g) ;
print "$greg \n" ;
}
until ( $cpt == 1 ) ;
#################################
sub convertir_chiffre
{
  my ($convertir_nombre ) = @_ ;
$longueur_nombre = length $convertir_nombre ;
my $nombre_final ;
my $chiffre1 = substr ( $convertir_nombre ,0,1) ;
my $chiffre2 = substr ( $convertir_nombre ,1,1) ;
my $chiffre3 = substr ( $convertir_nombre ,2,1) ;
my $chiffre4 = substr ( $convertir_nombre ,3,1) ;
my $chiffre5 = substr ( $convertir_nombre ,4,1) ;
  if    ( $convertir_nombre < 100  )               {$nombre_final = &inferieur_100 ( $convertir_nombre ) ;}
  elsif ( $convertir_nombre == 100 )             { $nombre_final = " cent";}
  elsif ( $convertir_nombre == 101 )                                                            { $nombre_final = " cent un";}
  elsif ( $longueur_nombre < 4 && $chiffre2 == 0 && $chiffre3 ==0 )  { $nombre_final = $mot{$chiffre1} .$mot{100} ; }
  elsif ( $longueur_nombre < 4 && $chiffre2 == 0 && $chiffre3 ==1 )  { $nombre_final = $mot{$chiffre1} . $mot{100} . " et un"; }
  elsif ( $longueur_nombre < 4 && $chiffre1 == 1 ) {$number = $chiffre2.$chiffre3 ;$nombre_final = $mot{cent}. &inferieur_100 ( $number ) ;   }
  elsif ( $longueur_nombre < 4 ) {$number = $chiffre2.$chiffre3 ;$nombre_final = $mot{$chiffre1} .$mot{100}. &inferieur_100 ( $number ) ;   }
  $nombre_lettre_netoyer = &netoyer_espace ($nombre_final) ;
  return $nombre_lettre_netoyer
}
#####traite les chiffres inferieure a 100
sub inferieur_100
{
 my ( $nombre_inferieur_100 ) = @_ ;
 my $chiffre_1 = substr ( $nombre_inferieur_100 ,0,1) ;
 my $chiffre_2 = substr ( $nombre_inferieur_100 ,1,1) ;
 $longueurnombre = length $nombre_inferieur_100 ;
  if ( $nombre_inferieur_100 == 1 ) { $nombrefinal = " un" ; }
  elsif ($nombre_inferieur_100 < 21  || $nombre_inferieur_100 == 71 ) { $nombrefinal = $mot{$nombre_inferieur_100}}
  elsif (  $chiffre_2 == 0 && $longueurnombre == 2 ) { $nombrefinal = $mot{$chiffre_1 * 10} ;}
  else
             {
                  if ( $chiffre_1 == 2 || $chiffre_1 == 3 || $chiffre_1 == 4 || $chiffre_1 == 5 || $chiffre_1 == 6 || $chiffre_1 == 8)
                      {
                                $nombrefinal = $mot{$chiffre_1 * 10} . $mot{$chiffre_2}
                      }
                  elsif ( $chiffre_1 == 7 || $chiffre_1 == 9 )
                      {
                       $num = $chiffre_1 -1 ;
                       $nombrefinal = $mot{$num * 10} . $mot{$chiffre_2+10} ;
                      }
             }
  return $nombrefinal
 }
################################
sub netoyer_espace
{
  my ( $nombre_f ) = @_ ;
  my $longueur_n = length $nombre_f ;
  $espace = substr ( $nombre_f , 0 , 1 ) ;
  if ( $espace eq " " ) {$nombre_f=substr ( $nombre_f , 1 , $longueur_n ) ;}
}