ToString, la méthode inverse

RamBabuze Messages postés 3 Date d'inscription vendredi 2 novembre 2007 Statut Membre Dernière intervention 17 octobre 2009 - 17 oct. 2009 à 15:13
RamBabuze Messages postés 3 Date d'inscription vendredi 2 novembre 2007 Statut Membre Dernière intervention 17 octobre 2009 - 17 oct. 2009 à 22:06
Il est très facile de formater un nombre en passant par la méthode ToString. Par exemple, je peux facilement afficher un numéro de téléphone américain en exécutant le code suivant:

Dim nombre1 As Double = 5145551212
Dim fmt As String = "(###) ###-####"
Dim str As String = nombre1.ToString(fmt)
'str contiendra (514) 555-1212

Je suis intéressé à trouver un bout de code qui ferait le travail inverse, c'est-à-dire qu'il recevrait deux paramètres, à savoir une chaine de caractères formatée ainsi que le format utilisé. Ce code retournerait un nombre (voici comment l'appel serait fait):

Dim nombre2 As Double = ToNumber(str, fmt)
'nombre2 contiendrait la valeur 5145551212

Quelqu'un aurait déjà vu ça quelque part?

3 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
17 oct. 2009 à 16:10
regarde du coté des méthodes Parse ou TryParse si elles existent.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 oct. 2009 à 20:34
salut,

vois d'abord la piste de casy que je n'ai pas testée

sinon, pourquoi s'arrêter au masque? puisque seul le numérique t'importe

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim nombre1 As Double = 5145551212
        Dim fmt As String = "(###) ###-####"
        Dim str As String = nombre1.ToString(fmt)
        'str contiendra (514) 555-1212

        Dim nombre2 As Double = ToNumber(str)
        'nombre2 contiendrait la valeur 5145551212 
        MessageBox.Show("'" & str & "' donne '" & nombre2.ToString & "'")
    End Sub

    Function ToNumber(ByVal sValue As String) As Double
        Dim sRet As String = String.Empty
        For i As Integer = 0 To sValue.Length - 1
            If Char.IsDigit(sValue(i)) Then sRet &= sValue(i).ToString
        Next i
        If sRet.Length = 0 Then
            Return 0
        Else
            Return Convert.ToDouble(sRet)
        End If
    End Function


++
[hr]
0
RamBabuze Messages postés 3 Date d'inscription vendredi 2 novembre 2007 Statut Membre Dernière intervention 17 octobre 2009
17 oct. 2009 à 22:06
Humm... "la piste de casy", j'ignore de quoi vous parlez... J'aimerais simplement ne pas avoir à me soucier d'estimer la valeur numérique d'un champ, si je peux mettre la main sur le format (masque) qui a été utilisé. La méthode "ToString" accepte en paramètre un format, je voudrais pouvoir lui (ou à un tiers) passer son résultat et son format, de façon à recevoir ce qu'y a été passé comme valeur numérique. En d'autres mots, j'aimerais connaître ce que .ToString a bien pu traiter pour me retourner une chaine de caractères ainsi modifiée à l'aide du format (que je connais).

Suis-je assez clair?
0
Rejoignez-nous