IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB.NET] Comment transcrire un chiffre en son équivalent mot ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ValNb = Val(Mid$(strTemp, i, 1))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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 : 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
     
    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
                                       ~~~

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ValNb > 1 Then
       tmpBuff = Unites(ValNb) & " "
    Else ....
    remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ValNb >= 1 Then
       tmpBuff = Unites(ValNb) & " "
    Else ....
    voilà

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ValNum = 1000 
         Return Milliers(1)
    End If
    juste sous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ValNum = 0 Or ValNum = 1 Then
          strResultat = Unites(ValNum)
    End If
    merci, voila c'est resolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  2. Réponses: 1
    Dernier message: 02/09/2009, 10h35
  3. [VB.Net]Comment "partager" son application?
    Par eultartuffe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/05/2006, 11h27
  4. Réponses: 2
    Dernier message: 11/05/2006, 10h47
  5. [VB.Net] Comment generer une page html dynamiquement ?
    Par Anonymous dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/03/2003, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo