![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Visual Basic .NET Forum d'entraide sur la programmation Visual Basic .NET. Avant de poster -> FAQ VB.NET, Articles VB.NET, Sources VB.NET |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) | |
|
Invité régulier
![]() Date d'inscription: juillet 2003
Messages: 14
|
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)) Code :
ValNb = CInt(strTemp.Substring(i, 1)) Si une âme charitable pouvais juste me convertir la ligne suivante : Code :
ValNb = Val(Mid$(strTemp, i, 1)) le script, c'est pas moi l'auteur mais il et dispo ici 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 : Citation:
Code :
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 :
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 ~~~ Dernière modification par neguib ; 26/05/2006 à 10h32 |
|
|
|
|
|
|
#2 (permalink) |
![]() Date d'inscription: mai 2005
Localisation: Suisse - Valais
Âge: 48
Messages: 3 840
|
Cà y est j'ai traduit tout ton code
donc n'oublies pas d'importer Microsoft.VisualBasic et donc d'utuliser Microsoft.VisualBasic.Left ensuite tu remplace comme je te l'ai dit mid$ par mid et çà fonctionne mais ya un bug si tu tape 1 il te renvoies rien c'est une erreur dans le code quand il fait Code :
If ValNb > 1 Then tmpBuff = Unites(ValNb) & " " Else .... Code :
If ValNb >= 1 Then tmpBuff = Unites(ValNb) & " " Else .... Dernière modification par neguib ; 26/05/2006 à 10h29 |
|
|
|
|
|
#3 (permalink) |
|
Invité régulier
![]() Date d'inscription: juillet 2003
Messages: 14
|
ca marche impec
y'a juste un petit soucis avec la serie des mille on dirait, le script affiche "un mille ". pour le reste ça à l'air d'etre ok. perso ca me derange pas trop car je traite que de gros chiffres :o à l'occasion je vais chercher une correction. pour resoudre le petit soucis des 1000, il suffit d'ajouter Code :
If ValNum = 1000 Return Milliers(1) End If Code :
If ValNum = 0 Or ValNum = 1 Then strResultat = Unites(ValNum) End If Dernière modification par neguib ; 26/05/2006 à 10h34 |
|
|
|
|
![]() |
![]() |
||
[VB.NET] Comment transcrire un chiffre en son équivalent mot ?
|
||
| Outils de la discussion | |
|
|