ProgrammationDéveloppeur d'applications métier, Ingénieur ERP/CRM

Comment est-ce que la manipulation des chaînes de saisie utilisateur et la vérification des entrées numériques sont réalisées dans Visual Basic ? Quelles sont les choses à surveiller lors de la conversion des chaînes en nombres ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Dans Visual Basic, les données sont souvent saisies par l'utilisateur sous forme de chaînes (par exemple, via TextBox ou InputBox), mais pour des traitements ultérieurs, il est nécessaire de les convertir en types numériques. Dans les anciennes versions de VB, une conversion laxiste était appliquée via Val ou CInt, ce qui entraînait des erreurs explicites et implicites en cas de données incorrectes. Il était présumé que la chaîne contenait toujours une valeur correcte, mais en pratique, les utilisateurs saisissent des caractères incorrects, ce qui provoque des erreurs ou des conversions incorrectes.

Le problème — la vulnérabilité de la conversion, entraînant un plantage de l'application ou des calculs erronés. Par exemple, Val("1a") renverra 1, ce qui peut être inattendu. L'utilisation de TryParse et une vérification stricte du format de saisie permettent d'éviter de telles erreurs et de traiter correctement les entrées.

La solution consiste à utiliser la méthode Integer.TryParse (ou Double.TryParse, etc.), qui ne renvoie True qu'en cas de conversion réussie.

Exemple de code :

Dim input As String = TextBox1.Text Dim value As Integer If Integer.TryParse(input, value) Then ' Un nombre correct a été saisi, la variable value contient la valeur Else MessageBox.Show("Veuillez saisir un entier") End If

Caractéristiques clés :

  • TryParse gère les erreurs de manière sécurisée, ne lance pas d'exception
  • Val et CInt ne conviennent pas aux données utilisateur sans vérification
  • Il est important de prendre en compte la localisation (séparateurs décimaux), d'utiliser les bonnes surcharges de TryParse

Questions pièges.

Pourquoi la fonction Val est-elle dangereuse lors du traitement des entrées utilisateur ?

Val renvoie une valeur numérique jusqu'au premier caractère non valide et ne lance pas d'erreur, ce qui peut entraîner une logique incorrecte.

Dim n = Val("12abc") ' Renverra 12, bien que la chaîne soit incorrecte

Quelle est la différence entre CInt et Integer.Parse ?

CInt effectue un arrondi à la banque, tandis qu'Integer.Parse exige une correspondance exacte de la chaîne avec le nombre et lance une exception en cas d'erreur.

Pourquoi TryParse ne renverra-t-il pas toujours True pour la chaîne "1,234" ?

Le résultat dépend des paramètres régionaux de Windows : parfois, le séparateur décimal est une virgule, d'autres fois, c'est un point. Il est important de spécifier clairement le format :

Dim number As Double Double.TryParse("1,234", NumberStyles.Any, CultureInfo.InvariantCulture, number)

Erreurs courantes et anti-patterns

  • Utilisation de Val ou conversion directe sans vérification
  • Non-prise en compte des paramètres régionaux
  • Omission de la vérification des données obtenues à partir de TextBox ou InputBox

Exemple de la vie réelle

Cas négatif

Le module financier recevait des données via InputBox, convertissait via Val, la somme de 10,5 devenait 10 dans certains cas (la virgule n'était pas reconnue et le point n'avait pas été saisi).

Avantages :

  • Peu de code, apparence simple

Inconvénients :

  • Perte de données, erreurs de calcul

Cas positif

Passage à TryParse en tenant compte des paramètres culturels et de la validation du champ de saisie.

Avantages :

  • Garantie de la validité des nombres
  • Affichage simple d'un message pour l'utilisateur si les données sont incorrectes

Inconvénients :

  • Nécessite plus de code, nécessite la gestion des erreurs et l'indication de la culture si nécessaire