INF130 - Ordinateurs et programmation Semaine 05 Document présenté par Frédérick Henri et conçu par les enseignants en informatique du SEG
Objectifs du cours Caractères - Table ASCII - Conversion Chaînes de caractères - Fonctions prédéfinies -Exercices INF130 - Cours 05 Objectifs
La table ASCII La table ASCIIest une liste qui contient 256 symboles (des caractères de l'alphabet ainsi que des caractères spéciaux et des caractères de contrôle) auquel est associé à chacun d'eux un code numérique L'acronyme ASCII provient de American Standards Committee for Information Interchange La table se compose des sections suivantes : -caractères0 à 31 : caractères de contrôle; - caractères 32 à 127 : caractères normaux; -caractères 128 à 255 : caractères de la table étendue (il en existe plusieurs version) Pourquoi se limiter à 256 caractères? Parce qu'il y a 256 valeurs possibles lorsqu'on emploie 8 bits (1 octet) Voici les caractères 32 (l'espace) à 255 selon Microsoft Excel : Code Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 160 192 À 224 à 33! 65 A 97 a 129 161 193 Á 225 á 34 " 66 B 98 b 130 162 194  226 â 35 # 67 C 99 c 131 ƒ 163 195 à 227 ã 36 $ 68 D 100 d 132 164 196 Ä 228 ä 37 % 69 E 101 e 133 165 197 Å 229 å 38 & 70 F 102 f 134 166 198 Æ 230 æ 39 ' 71 G 103 g 135 167 199 Ç 231 ç 40 ( 72 H 104 h 136 ˆ 168 200 È 232 è 41 ) 73 I 105 i 137 169 201 É 233 é 42 * 74 J 106 j 138 Š 170 ª 202 Ê 234 ê 43 + 75 K 107 k 139 171 «203 Ë 235 ë 44, 76 L 108 l 140 Œ 172 204 Ì 236 ì 45-77 M 109 m 141 173-205 Í 237 í 46 78 N 110 n 142 Ž 174 206 Î 238 î 47 / 79 O 111 o 143 175 207 Ï 239 ï 48 0 80 P 112 p 144 176 208 Ð 240 ð 49 1 81 Q 113 q 145 177 ± 209 Ñ 241 ñ 50 2 82 R 114 r 146 178 ² 210 Ò 242 ò 51 3 83 S 115 s 147 179 ³ 211 Ó 243 ó 52 4 84 T 116 t 148 180 212 Ô 244 ô 53 5 85 U 117 u 149 181 µ 213 Õ 245 õ 54 6 86 V 118 v 150 182 214 Ö 246 ö 55 7 87 W 119 w 151 183 215 247 56 8 88 X 120 x 152 184 216 Ø 248 ø 57 9 89 Y 121 y 153 185 ¹ 217 Ù 249 ù 58 : 90 Z 122 z 154 š 186 º 218 Ú 250 ú 59 ; 91 [ 123 { 155 187» 219 Û 251 û 60 < 92 \ 124 156 œ 188 ¼ 220 Ü 252 ü 61 = 93 ] 125 } 157 189 ½ 221 Ý 253 ý 62 > 94 ^ 126 ~ 158 ž 190 ¾ 222 Þ 254 þ 63? 95 _ 127 159 Ÿ 191 223 ß 255 ÿ INF130 - Cours 05 Table ASCII
Fonctions prédéfinies Il existe deux fonctions prédéfinies en VBA permettant de consulter la table ASCII Chr La fonction Chr retourne le caractères associé à un code ASCII Exemples: Chr(65) retourne "A" Chr(97) retourne "a" Chr(123) retourne "{" Asc À l'inverse, la fonction Asc retourne le code ASCII associé à un caractère donné Asc("A") retourne 65 Asc("a") retourne 97 Asc("{")retourne 123 INF130 - Cours 05 Fonctions VBA 1
Conversion de minuscule à majuscule Afin de convertir un caractère majuscule en caractère minuscule, il est important de remarquer où se situent les lettres majuscules et les lettres minuscules dans la table ASCII 0 65 = "A" 90 = "Z" 97 = "a" 122 = "z" Lettres majuscules Lettres minuscules Pour convertir un caractère en minuscules, il suffit de trouver la distance entre la lettre à convertir et la lettre "A" Ensuite, on se positionne à la même distance de "a" pour obtenir la lettre minuscule correspondante À titre d'exemple, pour convertir la lettre "E" en minuscule, nous ferions ceci : 1) Calcul de la distance entre "E" et "A" Asc("E") -Asc("A") = 69-65 = 4 2) Déplacement de cette distance par rapport à "a" Chr(Asc("a") + 4)= "e" INF130 - Cours 05 Majuscule à minuscule
Exercice Écrivez une fonction qui convertit un caractère représentant une lettre minuscule en lettre majuscule INF130 - Cours 05 Exercice 1
Solution Public Function convertir_en_majuscule(byval caractere As String) As String convertir_en_majuscule = Chr(Asc(caractere) - Asc("a") + Asc("A")) End Function Remarquons que Lors de l'appel de la fonctionci-dessus, sile paramètre effectif est un caractère qui représente autre chose qu'une lettre, la conversion semble donner n'importe quoi Par exemple, l'appel convertir_en_majuscule("r") retourne "2" De plus, sile paramètre effectif est une chaîne de caractères qui contient plus d'un caractères, alors la conversion ne traite que le premier caractères Ainsi, l'appel convertir_en_majuscule("fred") retourne "F" Nous verrons comment régler ces problèmes sous-peu INF130 - Cours 05 Solution 1
Opérateurs servant à manipuler des chaînes En VBA, le typestringpermet de conserver une chaîne de caractères Il existe plusieurs opérateurs permettant de manipuler des chaînes de caractères Opérateurs d'assignation = L'opérateur = permet d'assigner une chaîne à une variable Exemple Dim une_chaine As String une_chaine = "Allo" Opérateurs de comparaison < <= > >= = <> Les opérateurs de comparaison peuvent être employés pour comparer des chaînes de caractères Pour ce faire, VBA utilise la table des caractères ASCII pour savoir si un caractère est "supérieur" à un autre Exemples "A" < "B" retourne True "INF130" > "CHM131" retourne True "ALLO" = "allo" retourne False Opérateur de concaténation & L'opérateur de concaténation &permet de créer une nouvelle chaînes à partir de la juxtaposition de deux expressions Il est préféré à l'opérateur +pour concaténer deux chaînes de caractères, car il impose que le résultat soit de type String Ainsi, il n'y a pas de confusion possible lors de l'interprétation des expressions lorsque des variables de types numériques sont concaténées Exemple "INF" & "130" retourne "INF130" "V" & "B" & "A" retourne "VBA" INF130 - Cours 05 Opérations
Exercices Écrivez une fonction qui retourne Truesiun caractère représente un chiffre et Falsedans tous les autres cas Supposez que la chaîne reçue ne contient qu'une seul caractère et n'utilisez aucune des fonctions de VBA Écrivez une fonction qui retourne True si un caractère représente une lettre majuscule et False dans tous les autres cas Supposez que la chaîne reçue ne contient qu'une seul caractère et n'utilisez aucune des fonctions de VBA Écrivez une fonction qui retourne True si un caractère représente une lettre minuscule et False dans tous les autres cas Supposez que la chaîne reçue ne contient qu'une seul caractère et n'utilisez aucune des fonctions de VBA Écrivez une fonction qui retourne Truesiun caractère représente une lettre et Falsedans tous les autres cas Supposez que la chaîne reçue ne contient qu'une seul caractère et n'utilisez aucune des fonctions de VBA Écrivez une fonction qui convertit un caractèreen majuscule Si le caractère reçu n'est pas une lettre minuscule, alors il le retourne inchangé Supposez que la chaîne reçue ne contient qu'une seul caractère et n'utilisez aucune des fonctions de VBA INF130 - Cours 05 Exercices 2
Solutions Public Function est_un_chiffre(byval caractere As String) As Boolean est_un_chiffre = (caractere >= "0" And caractere <= "9") Public Function est_une_majuscule(byval caractere As String) As Boolean est_une_majuscule = (caractere >= "A" And caractere <= "Z") Public Function est_une_minuscule(byval caractere As String) As Boolean est_une_minuscule = (caractere >= "a" And caractere <= "z") Public Function est_une_lettre(byval caractere As String) As Boolean est_une_lettre = est_une_majuscule(caractere) Or _ est_une_minuscule(caractere) End Function Public Function convertir_en_majuscule(byval caractere As String) As String If (Not est_une_lettre_minuscule(caractere)) Then convertir_en_majuscule = caractere Else convertir_en_majuscule = Chr(Asc(caractere) - Asc("a") + Asc("A")) End If End Function INF130 - Cours 05 Solutions 2
Exercice sur les chaînes de caractères Écrivez une fonction nommée lpadqui reçoit une chaînede caractères et ajoute nblancs au début de la chaîne À titre d'exemple, l'appel lpad("allo", 3) retourne " allo" INF130 - Cours 05 Exercices 3
Solution de l'exercice sur les chaînes de caractères ' ' LPAD ' ' Cette fonction reçoit une chaîne de caractères, ajoute n blancs au ' début de celle-ci et la retourne ' ' PARAMÈTRES : ' - chaine : La chaîne initiale (type : String) ' - nb_blancs : Le nombre de blancs à ajouter (type : Integer) ' ' VALEUR DE RETOUR : La chaîne au début de laquelle des blancs ont été ' ajouté (type : String) ' ' EXEMPLE D'APPEL : ' lpad("allo", 3) retourne " allo" ' Public Function lpad(byval chaine As String, _ ByVal nb_blancs As Integer) As String Dim i As Integer ' Compte les blancs ajoutés au début ' On ajoute un blanc au début de la chaîne à nb_blancs reprises For i = 1 To nb_blancs chaine = " " & chaine Next i lpad = chaine End Function INF130 - Cours 05 Solutions 3
Fonctions servant à manipuler une chaîne VBA offre plusieurs fonctions permettant de manipuler des chaînes de caractères; en voici quelques-unes Référez-vous à l'aide en ligne de VBA pour connaître la syntaxe de ces fonctions Fonctions Len Cette fonction retourne la longueur d'une chaîne de caractères Len("Bonjour") retourne 7 Len("") retourne 0 UCase et LCase Les fonctions UCase(upper case) et LCase(lower case) retournent une chaîne de caractères où les lettres sont converties en majuscules ou en minuscules UCase("Bonjour") retourne "BONJOUR" LCase("Bonjour") retourne "bonjour" UCase("inf130") retourne "INF130" Left et Right Ces fonctions permettent d'extraire d'une chaîne de caractères un nombre donné de caractères respectivement à partir de la gauche ou de la droite Left("Bonjour", 3) retourne "Bon" Right("Bonjour", 4) retourne "jour" Right("Bonjour", Len("Bonjour") - 1) retourne "onjour" Mid Cette fonction permet d'extraire d'une chaîne de caractères une sous-chaîne située à une position donnée et d'une longueur donnée Mid("Bonjour", 1, 1) retourne "B" Mid("Bonjour", 2, 1) retourne "o" Mid("Bonjour", 1, 3) retourne "Bon" Mid("Bonjour", 4, 4) retourne "jour" Mid("Bonjour", 5, 2) retourne "ou" Trim Cette fonction retourne une copie de le chaîne de caractères reçue en paramètre mais sans ses espaces de gauche, ni ses espaces de droite Trim(" Bonjour ") retourne "Bonjour" Trim(" Bonjour") retourne "Bonjour" Trim(" ") retourne "" (une chaîne vide) InStr Cette fonction retourne la position de la première apparition d'une chaîne à l'intérieur de la chaîne reçue en paramètre, ou 0 (zéro) si la chaîne n'est pas trouvée InStr("Bonjour", "on") retourne 2 InStr("Bonjour", "o") retourne 2 InStr("Bonjour", "jour") retourne 4 InStr("Bonjour", "zzz") retourne 0 FormatNumber Cette fonction retourne une représentation en chaîne de caractères d'un nombre selon les désirs du programmeur (nombre de décimales à afficher après le point, regroupement des milliers, etc) Exemple : FormatNumber(123456789, 2, vbtrue) retourne "12 34568" IsNumeric Cette fonction retourne Truesi son paramètre peut être interprété comme étant un nombre Attention toutefois au signe "-", aux virgules et aux points ainsi qu'aux espaces qui peuvent être acceptés ou non en fonction des configurations de l'ordinateur Cette fonction est donc dangeureuse à utiliser! IsNumeric("-123") retourne True INF130 - Cours 05 Fonctions VBA 2
Exercices Écrivez une fonction nommée ltrimqui reçoit une chaînede caractères et retourne celle-ci sans les blancs se trouvant au début ltrim(" allo ") retourne "allo " ltrim("inf 130") retourne "INF 130" Écrivez une fonction qui reçoit une chaînede caractères et retourne celle-ci après l'avoir convertie en majuscules N'utilisez pas la fonction Ucase Écrivez une fonction qui reçoit une chaînede caractères et un caractère Elle retourne le nombre d'occurrences de ce caractère dans la chaîne (le nombre de fois que ce caractère se retrouve dans la chaîne) Écrivez une fonction qui reçoit deux chaînes de caractères;la première contient une phrase alors que la seconde contient une liste de caractères à conserver La fonction parcourt la phrase et à chaque fois qu'elle trouve un caractère qui n'est pas dans la seconde chaîne et qui n'est pas un blanc, elle le remplace par une étoile Elle retourne la phrase obtenue À titre d'exemple, l'appel phrase_censuree("vive le vent", "eit ")retourne la chaîne "*i*e *e *e*t" INF130 - Cours 05 Exercices 4
Solutions Public Function ltrim(byval chaine As String) As String ' On retire le caractère au début de la chaîne tant que c'est ' un blanc While (Left(chaine, 1) = " ") chaine = Right(chaine, Len(chaine) - 1) Wend ltrim = chaine End Function Public Function chaine_en_majuscule(byval chaine As String) As String Dim longueur_chaine As Long ' Le nombre de caractères de la chaîne Dim i As Long ' On calcule la longueur de la chaine longueur_chaine = Len(chaine) ' On convertit en majuscule chaque caractère et on l'ajoute à la ' chaîne solution chaine_en_majuscule = "" For i = 1 To longueur_chaine chaine_en_majuscule = chaine_en_majuscule & _ convertir_en_majuscule(mid(chaine, i, 1)) Next i End Function Public Function nb_occurrences_caractere(byval chaine As String, _ ByVal caractere As String) As Long Dim longueur_chaine As Long ' Le nombre de caractères de la chaîne Dim i As Long ' On calcule la longueur de la chaîne longueur_chaine = Len(chaine) ' On parcourt la chaîne et on compte le nombre de fois que le caractère ' est rencontré nb_occurrences_caractere = 0 For i = 1 To longueur_chaine If (mid(chaine, i, 1) = caractere) Then nb_occurrences_caractere = nb_occurrences_caractere + 1 End If Next i End Function Public Function phrase_censuree(byval phrase As String, _ ByVal caractere_a_conserver As String) _ As String Dim i As Integer ' Pour parcourir la phrase ' On consulte chaque caractère de la phrase For i = 1 To Len(phrase) ' Si le caractère est dans la liste des caractères à conserver, ' alors on ajoute le caractère à la réponse ' Sinon, on ajoute une étoile If (InStr(caractere_a_conserver, Mid(phrase, i, 1)) <> 0) Then phrase_censuree = phrase_censuree & Mid(phrase, i, 1) Else phrase_censuree = phrase_censuree & "*" End If Next i End Function INF130 - Cours 05 Solutions 4
Les chaînes de caractèresexistent dans tous les langages Cependant, leur manipulation varie énormément d'un langage à un autre Pour ce cours, il est intéressant de comprendre comment accéder aux caractères d'une chaîne, car cela aide également à mieux saisir le fonctionnement des tableaux - Terminer le travail pratique numéro I Conclusion À faire cette semaine Notions importantes vues cette semaine -Fonctions liéesaux codes ASCII : Chret Asc; -Opérations sur les chaînes : =, &, <, <=, =, >=et >; - Fonctions servant à manipuler des chaînes de caractères : Len, Ucase, LCase, Left, Right, Mid et InStr INF130 - Cours 05 Conclusion