[VB.NET] Comment transcrire un chiffre en son équivalent mot ?
Bonjour à tous,
je suis à la recherche d'un convertisseur d'un script permettant de convertir un nombre (entier) en lettres.
Apres quelques recherche sur Google, j'ai trouvé en script en VB6 qui ne compile pas sous .NET car la fonction Mid$ n'existe plus sous VB .NET.
j'aurais voulu savoir si quelqu'un avait déjà un code tout fait pour cette opération en C#ou VB .NET au choix ce qui m'éviterait d'avoir à adapter le code VB6 -> .NET car le débuggage de ce genre de chose n'est pas specialement passionnant.
En fait Il s'agit de convertir un nombre en son equivalent litérraire.
exemple :
20 -> vingt
1200 -> mille deux cent, etc.
Donc faut quelques ligne de code pour faire ça... et çà prend pas mal de temps. Etant donné que la question doit être assez récurente sur les projets où il faut imprimer des contrats, chèques, etc. je me suis demandé si qq n'aurait pas un petit bout de code à partager, voila tout.
car sur google, c'est du VB6 ou rien à moins que je n'ai pas bien trouvé...
je vais essayer de convertir ce VB6 en VB .NET.
le code fait environ 150 lignes et la seule les fonctions Mid$ et Val posent problème
Voici comment je convertis la ligne :
Code:
ValNb = Val(Mid$(strTemp, i, 1))
par
Code:
ValNb = CInt(strTemp.Substring(i, 1))
mais ca ne fonctionne pas, en fait je ne fait pas du tout de VB6 ni de VB .NET et n'ai pas du tout envie de m'y mettre.
Si une âme charitable pouvais juste me convertir la ligne suivante :
Code:
ValNb = Val(Mid$(strTemp, i, 1))
je lui en serait tres reconnaissant, je vous fournirrait le code une fois qu'il sera OP, biensur.
je posterai la traduction sur ce site une fois qu'elle fonctionnera.
mais j'espere pouvoir le traduire sans pour autant le comprendre, car commencer à entrer dans le micmac des calculs d'indice, non merci !
mon compilateur VB .NET ne reconnait pas les fonctions Mid, Len, Var, Int -> tout ce qui est pas objet en gros.
y'a t-il une directive pour assurer la retro-comptabilité ?
mon code est placé dans un fichier ".vb" et est compilé de la façon suivante :
Code:
C:\WINNT\Microsoft.NET\Framework\v1.1.4322\vbc.exe /target:library /out:x:\Bin\Utils.dll /recurse:X:\c_data\*.vb
voici le code et les erreurs ci-dessous :) :
Code:
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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
| Public Module Utils
Public Function Nombre2Texte(ByVal ValNum As Double) As String
Static Unites(9) As String
Static Dixaines(9) As String
Static LesDixaines(9) As String
Static Milliers(4) As String
Dim i As Integer
Dim nPosition As Integer
Dim ValNb As Integer
Dim LesZeros As Integer
Dim strResultat As String
Dim strTemp As String
Dim tmpBuff As String
Unites(0) = "zero"
Unites(1) = "un"
Unites(2) = "deux"
Unites(3) = "trois"
Unites(4) = "quatre"
Unites(5) = "cinq"
Unites(6) = "six"
Unites(7) = "sept"
Unites(8) = "huit"
Unites(9) = "neuf"
Dixaines(0) = "dix"
Dixaines(1) = "onze"
Dixaines(2) = "douze"
Dixaines(3) = "treize"
Dixaines(4) = "quatorze"
Dixaines(5) = "quinze"
Dixaines(6) = "seize"
Dixaines(7) = "dix-sept"
Dixaines(8) = "dix-huit"
Dixaines(9) = "dix-neuf"
LesDixaines(0) = ""
LesDixaines(1) = "dix"
LesDixaines(2) = "vingt"
LesDixaines(3) = "trente"
LesDixaines(4) = "quarante"
LesDixaines(5) = "cinquante"
LesDixaines(6) = "soixante"
LesDixaines(7) = "soixante-dix"
LesDixaines(8) = "quatre-vingt"
LesDixaines(9) = "quatre-vingt-dix"
Milliers(0) = ""
Milliers(1) = "mille"
Milliers(2) = "million"
Milliers(3) = "millard"
Milliers(4) = "mille"
On Error GoTo NbVersTexteError
strTemp = CStr(Int(ValNum))
If ValNum = 0 Or ValNum = 1 Then
strResultat = Unites(ValNum)
End If
For i = Len(strTemp) To 1 Step -1
ValNb = Val(Mid(strTemp, i, 1))
nPosition = (Len(strTemp) - i) + 1
Select Case (nPosition Mod 3)
Case 1
LesZeros = False
If i = 1 Then
If ValNb >= 1 Then
tmpBuff = Unites(ValNb) & " "
Else
tmpBuff = ""
End If
ElseIf Mid(strTemp, i - 1, 1) = "1" Then
tmpBuff = Dixaines(ValNb) & " "
i = i - 1
ElseIf Mid(strTemp, i - 1, 1) = "9" Then
tmpBuff = LesDixaines(8) & " " & Dixaines(ValNb) & " "
i = i - 1
ElseIf Mid(strTemp, i - 1, 1) = "7" Then
If ValNb = 1 Then
tmpBuff = LesDixaines(6) & " et " & Dixaines
(ValNb) & " "
Else
tmpBuff = LesDixaines(6) & " " & Dixaines(ValNb) &
" "
End If
i = i - 1
ElseIf ValNb > 0 Then
tmpBuff = Unites(ValNb) & " "
Else
LesZeros = True
If i > 1 Then
If Mid(strTemp, i - 1, 1) <> "0" Then
LesZeros = False
End If
End If
If i > 2 Then
If Mid(strTemp, i - 2, 1) <> "0" Then
LesZeros = False
End If
End If
tmpBuff = ""
End If
If LesZeros = False And nPosition > 1 Then
tmpBuff = tmpBuff & Milliers(nPosition / 3) & " "
End If
strResultat = tmpBuff & strResultat
Case 2
If ValNb > 0 Then
If strResultat = "un " And ValNb <> 8 Then
strResultat = LesDixaines(ValNb) & " et " &
strResultat
Else
strResultat = LesDixaines(ValNb) & " " &
strResultat
End If
End If
Case 0
If ValNb > 0 Then
If ValNb > 1 Then
strResultat = Unites(ValNb) & " cent " &
strResultat
Else
strResultat = "cent " & strResultat
End If
End If
End Select
Next i
'If Len(strResultat) > 0 Then
' strResultat = UCase$(Left$(strResultat, 1)) & Mid(strResultat,
2)
'End If
EndNbVersTexte:
Nombre2Texte = strResultat
Exit Function
NbVersTexteError:
Nombre2Texte = "!! Erreur !!"
Resume EndNbVersTexte
End Function
End Module |
Code:
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
|
Microsoft (R) Visual Basic .NET Compiler version 7.10.6001.4
for Microsoft (R) .NET Framework version 1.1.4322.2032
Copyright (C) Microsoft Corporation 1987-2002. All rights reserved.
X:\c_data\Utils.vb(57) : error BC30451: Name 'Int' is not declared.
strTemp = CStr(Int(ValNum))
~~~
X:\c_data\Utils.vb(63) : error BC30451: Name 'Len' is not declared.
For i = Len(strTemp) To 1 Step -1
~~~
X:\c_data\Utils.vb(64) : error BC30451: Name 'Val' is not declared.
ValNb = Val(Mid(strTemp, i, 1))
~~~
X:\c_data\Utils.vb(64) : error BC30451: Name 'Mid' is not declared.
ValNb = Val(Mid(strTemp, i, 1))
~~~
X:\c_data\Utils.vb(65) : error BC30451: Name 'Len' is not declared.
nPosition = (Len(strTemp) - i) + 1
~~~
X:\c_data\Utils.vb(75) : error BC30451: Name 'Mid' is not declared.
ElseIf Mid(strTemp, i - 1, 1) = "1" Then
~~~
X:\c_data\Utils.vb(78) : error BC30451: Name 'Mid' is not declared.
ElseIf Mid(strTemp, i - 1, 1) = "9" Then
~~~
X:\c_data\Utils.vb(81) : error BC30451: Name 'Mid' is not declared.
ElseIf Mid(strTemp, i - 1, 1) = "7" Then
~~~
X:\c_data\Utils.vb(93) : error BC30451: Name 'Mid' is not declared.
If Mid(strTemp, i - 1, 1) <> "0" Then
~~~
X:\c_data\Utils.vb(98) : error BC30451: Name 'Mid' is not declared.
If Mid(strTemp, i - 2, 1) <> "0" Then
~~~ |