Chapitre 6 - Chaînes de caractères
Transcription
Chapitre 6 - Chaînes de caractères
Chapitre 6 Chaînes de caractères Objectifs À la fin de ce chapitre, le lecteur sera en mesure : de déclarer et dinitialiser des chaînes de caractères; dutiliser les méthodes prédéfinies qui permettent de manipuler les chaînes de caractères. 61 Une chaîne de caractères (appelée string en anglais) est une suite de caractères permettant de manipuler des mots et des phrases. Ce sont donc des objets importants en programmation, intervenant dans la communication entre l'utilisateur et l'ordinateur. Dans ce chapitre, la représentation d'une chaîne de caractères dans la mémoire de l'ordinateur est d'abord présentée. Par la suite, l'utilisation et la manipulation de chaînes de caractères dans une macro est expliquée. Qu'est-ce qu'une chaîne de caractères Dans la mémoire de l'ordinateur, une chaîne de caractères est stockée sous forme d'un tableau de caractères. Chaque caractère est codé en utilisant un codage ACSII, UTF-8 ou unicode dépendant du langage de programmation utilisé. De plus, la longueur de la chaîne de caractères est aussi stockée en mémoire. La figure suivante représente la chaîne de caractères « Steph » stocké en mémoire. Figure 6.1 : Chaîne de caractère en mémoire Création et initialisation d'une chaîne de caractères En VBA, il existe 2 types de chaînes de caractères : les chaînes de longueur fixe et les chaînes de longueur variable. Ces deux types de chaînes ont une taille limite différente : Soit 64 Ko pour les chaînes de longueur fixe Et 2 Go pour les chaînes de longueur variable Les chaînes sont représentées par des objets de type String. Ce sont des objets de ce type qui sont construits par le compilateur quand il rencontre une chaîne littérale dans le programme source. Une chaîne littérale est une suite de caractères entourés par des apostrophes doubles « " », comme par exemple "Steph". La longueur de la chaîne est le nombre de caractères figurant entre les apostrophes : 5 pour "Steph" et 0 pour la chaîne vide 62 "". Les exemples suivants présentent différentes façons de déclarer une chaîne de caractères. Exemple 6.1 Déclarer la variable UneChaine qui contiendra alors une chaîne de longueur variable: Dim UneChaine As String Exemple 6.2 Déclarer la variable UneChaine qui contiendra une chaîne de longueur 1, c'est à dire un seul caractère: Dim UneChaine As String * 1 Exemple 6.3 Déclarer la variable UneChaine qui contiendra une chaîne de longueur 30. Dim UneChaine As String * 30 Si l'on n'affecte que 18 caractères dans une telle chaîne, le reste sera rempli d'espaces. Si l'on affecte plus de 30 caractères, le surplus sera tronqué. Les chaînes littérales peuvent servir à initialiser une variable de type String : Dim UneChaine As String UneChaine = "Samuel" Manipulation de chaînes de caractères VBA fournit plusieurs fonctions prédéfinies permettant de manipuler les chaînes de caractères. Cette section présente quelques-unes de ces fonctions. 63 Longueur dune chaîne La fonction len renvoie la longueur de la chaîne, c'est à dire le nombre de caractères de la chaîne. Exemple 6.4 Afficher la longueur de la chaîne littérale "stephane" Msgbox len ("stephane") L'exécution de cette instruction, affichera dans une boîte de dialogue le nombre 8. Comparaison de deux chaînes On compare deux chaînes de caractères par la fonction StrComp. Elle renvoie la valeur numérique 0, si les deux chaînes sont rigoureusement identiques et la valeur 1, si elles sont différentes. Exemple 6.5 Afficher le message « La réponse est oui » si la variable Reponse contient la chaîne "oui". If StrComp (Reponse, "oui") Then msgbox "La réponse est oui" End if Extraction dune sous-chaîne La fonction Right extrait la partie droite d'une chaîne de caractères. Le nombre de caractères de cette partie doit être précisé. Exemple 6.6 Afficher les 3 derniers caractères de la chaîne littérale "stephane" MsgBox Right ("Stephane", 3) Le résultat affiché par cet exemple sera « ane » La fonction Left donne la partie gauche d'une chaîne de caractères. Le nombre de caractères de cette partie doit être précisé. 64 Exemple 6.7 Afficher les 3 premiers caractères de la chaîne littérale "Stephane". MsgBox Left ("Stephane", 3) L'exécution de cette instruction, affichera dans une boîte de dialogue la chaîne « Ste » La fonction Mid extrait une partie d'une chaîne de caractères. Le nombre de caractères de cette partie doit être précisé ainsi que la position du premier caractère extrait. Exemple 6.8 Afficher 3 caractères à partir de la position 4. MsgBox Mid ("Stephane", 4, 3) Le résultat affiché par l'instruction précédente sera « pha ». Concaténation de chaînes Il existe deux opérateurs pour concaténer les chaînes de caractères. Il est possible dutiliser soit l'opérateur + ou l'opérateur &. Les 2 exemples suivants illustrent les différences entre les 2 opérateurs. Exemple 6.9 Dim strResultat As String strResultat = "Test " & 1 & 2 'Le résultat est Test 12 Le résultat affiché par cet exemple sera « Test 12 ». Exemple 6.10 Dim strResultat As String strResultat = "Test " + 1 + 2 'Le résultat est Test 3 Cet exemple affichera « Test 3 ». 65 Conversion majuscules/minuscules La méthode Ucase met tout le texte en majuscules et permet de rechercher indépendamment une lettre minuscule ou majuscule. Exemple 6.11 Convertir la chaîne "Stephane" en majuscule et l'afficher MsgBox Ucase ("Stephane") 'renvoie STEPHANE La méthode Lcase met tout le texte en minuscules. L'exemple suivant transforme la chaîne "Stephane" en "stephane" Exemple 6.12 MsgBox Lcase ("Stephane") 'renvoie stephane Scinder une chaîne Cette méthode découpe une chaîne de caractères en fonction dun caractère spécifique. Le résultat de ce découpage est stocké dans un tableau. Exemple 6.13 Extraire les degrés, minutes et secondes d'une coordonnée géographique contenue dans la chaîne "4:03:27". Dim Dim Dim Dim Dim CoordDMS As String Tableau() As String Deg As Integer Min As Integer Sec As Integer CoordDMS = "4:03:27" Tableau = Split(CoordDMS, ":") Deg = Tableau(0) 'renvoie 4 Min = Tableau(1) 'renvoie 03 Sec = Tableau(2) 'renvoie 27 Dans cet exemple, la chaîne de caractères est scindée en trois par le caractère « : ». 66 Inversion dune chaîne La méthode StrReverse permet dinverser lordre des caractères dans une chaîne. Exemple 6.14 MsgBox StrReverse ("Stephane") L'exécution de cette instruction, affichera dans une boîte de dialogue la chaîne « enahpetS » Remplacement de caractères La méthode Replace permet de remplacer des caractères dans une chaîne. Dans lexemple suivant, les virgules sont remplacées par des points: MsgBox Replace ("10,10", ",", ".") Le résultat affiché par cet exemple sera donc 10.10 Exemple 6.15 Écrire une macro VBA qui permet de saisir un mot à l'aide d'une fenêtre de dialogue et de vérifier s'il s'agit d'un palindrome. Un palindrome est une chaîne de caractères symétrique par rapport à son centre. Par exemple, les chaînes 'ABCCBA' ou 'ABCDCBA' sont des palindromes. Sub Exemple15() Dim palindrome As String palindrome = InputBox("Entrez un mot") palindrome = UCase(palindrome) If palindrome = StrReverse(palindrome) Then MsgBox ("Ceci est un palindrome") End If End Sub Exercices Exercice 6.1 Écrire une macro en VBA qui demande à lusager dentrer une chaîne de caractères et 67 afficher, à laide dun MsgBox, la longueur de cette chaîne. Exercice 6.2 Dans cet exercice, on étend la notion de palindrome à des phrases dans lesquelles on ignore les espaces pour ne conserver, finalement, que les caractères alphabétiques. De même, on fait abstraction de l'accentuation des caractères. Voici quelques exemples qui pourront servir à tester votre programme: Elu par cette crapule Engage le jeu que je le gagne Esope reste ici et se repose Karine alla en Irak Votre programme VBA devra donc : saisir une phrase via une fenêtre de dialogue; en normaliser la casse (majuscules/minuscules); modifier celle-ci afin d'en retirer les caractères indésirables; vérifier le palindrome. 68 Exercice 6.3 Écrire une macro qui lit des coordonnées géographiques dans le format degrés, minutes, secondes et orientation. (Exemple : 25:02:23,56 ouest). Votre macro devra extraire de cette chaîne de caractères les informations suivantes et les afficher: Degrés; Minutes; Secondes; Orientation. (Erreur dans figure) 69