semaine 06 - ena. · pdf filecode car code car code car code car code car code car code car...
TRANSCRIPT
INF130 - Ordinateurs et programmation
Semaine 06
Document présenté par Frédérick Henriet conçu par les enseignants en informatique du SEG
Caractères- Table ASCII- Conversion
Chaînes de caractères- Fonctions prédéfinies- Exercices
Objectifs du cours
INF130 - Cours 05 Objectifs
Voici les caractères 32 (l'espace) à 255 selon Microsoft Excel :
Code Car Code Car Code Car Code Car Code Car Code Car Code Car32 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 ÿ
La table ASCII
La table ASCII est 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ères 0 à 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).
INF130 - Cours 05 Table ASCII
Il existe deux fonctions prédéfinies en VBA permettant de consulter la table ASCII.
Chr
La fonction Chr retourne le caractère 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é.Exemples :Asc("A") retourne 65Asc("a") retourne 97Asc("{") retourne 123
Fonctions prédéfinies
INF130 - Cours 05 Fonctions VBA 1
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
Conversion de minuscule à majuscule
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
Écrivez une fonction qui convertit un caractère représentant une lettre minuscule en lettremajuscule.
Exercice
INF130 - Cours 05 Exercice 1
Remarquons que...
Lors de l'appel de la fonction ci-dessus, si le 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, si le paramètre effectif est une chaîne de caractères qui contient plus d'un caractère, alors la conversion ne traite que le premier caractère. Ainsi, l'appel convertir_en_majuscule("fred") retourne "F"
Nous verrons comment régler ces problèmes sous-peu.
Solution
Public Function convertir_en_majuscule(ByVal caractere As String) As Stringconvertir_en_majuscule = Chr(Asc(caractere) - Asc("a") + Asc("A"))
End Function
INF130 - Cours 05 Solution 1
En VBA, le type String permet de conserver une chaîne de caractères. Il existe plusieurs opérateurs permettant de manipuler des chaînes de caractères.
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îne à 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"
Opérateurs servant à manipuler des chaînes
Opérateurs d'assignation=
L'opérateur = permet d'assigner une chaîne à une variable.
Exemple
Dim une_chaine As Stringune_chaine = "Allo"
INF130 - Cours 05 Opérations
Écrivez une fonction qui retourne True si un caractère représente un chiffre et False dans tous les autres cas.
Supposez que la chaîne reçue ne contient qu'un 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 et False dans tous les autres cas.
Supposez que la chaîne reçue ne contient qu'un seul caractère et n'utilisez aucune des fonctions de VBA.
Écrivez une fonction qui convertit un caractère en 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'un 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 Falsedans tous les autres cas.
Supposez que la chaîne reçue ne contient qu'un 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 Falsedans tous les autres cas.
Supposez que la chaîne reçue ne contient qu'un seul caractère et n'utilisez aucune des fonctions de VBA.
Exercices
INF130 - Cours 05 Exercices 2
Solutions
Public Function est_un_chiffre(ByVal caractere As String) As Booleanest_un_chiffre = (caractere >= "0" And caractere <= "9")
Public Function est_une_majuscule(ByVal caractere As String) As Booleanest_une_majuscule = (caractere >= "A" And caractere <= "Z")
Public Function est_une_minuscule(ByVal caractere As String) As Booleanest_une_minuscule = (caractere >= "a" And caractere <= "z")
Public Function est_une_lettre(ByVal caractere As String) As Booleanest_une_lettre = est_une_majuscule(caractere) Or _
est_une_minuscule(caractere)End Function
Public Function convertir_en_majuscule(ByVal caractere As String) As StringIf (Not est_une_lettre_minuscule(caractere)) Then
convertir_en_majuscule = caractereElse
convertir_en_majuscule = Chr(Asc(caractere) - Asc("a") + Asc("A"))End If
End Function
INF130 - Cours 05 Solutions 2
Écrivez une fonction nommée lpad qui reçoit une chaîne de caractères et ajoute n blancs au début de la chaîne.
À titre d'exemple, l'appel lpad("allo", 3) retourne " allo".
Exercice sur les chaînes de caractères
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 StringDim 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 = " " & chaineNext ilpad = 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.Exemples :
Len("Bonjour") retourne 7Len("") retourne 0
UCase et LCaseLes 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.Exemples :
UCase("Bonjour") retourne "BONJOUR"LCase("Bonjour") retourne "bonjour"UCase("inf130") retourne "INF130"
Left et RightCes 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.Exemples :
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.Exemples :
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 la chaîne de caractères reçue en paramètre mais sans ses espaces de gauche, ni ses espaces de droite.Exemples :
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.Exemples :
InStr("Bonjour", "on") retourne 2InStr("Bonjour", "o") retourne 2InStr("Bonjour", "jour") retourne 4InStr("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(12345.6789, 2, vbTrue) retourne "12 345.68"
IsNumeric
Cette fonction retourne True si 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 dangereuse à utiliser!Exemples :
IsNumeric("-123") retourne True
INF130 - Cours 05 Fonctions VBA 2
Écrivez une fonction nommée ltrim qui reçoit une chaîne de caractères et retourne celle-ci sans les blancs se trouvant au début.
Exemples :ltrim(" allo ") retourne "allo "ltrim("INF 130") retourne "INF 130"
Écrivez une fonction qui reçoit une chaîne de 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 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".
Écrivez une fonction qui reçoit une chaîne de 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).
Exercices
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 = chaineEnd Function
Public Function chaine_en_majuscule(ByVal chaine As String) As StringDim 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 iEnd 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 = 0For i = 1 To longueur_chaine
If (mid(chaine, i, 1) = caractere) Thennb_occurrences_caractere = nb_occurrences_caractere + 1
End IfNext 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 iEnd Function
INF130 - Cours 05 Solutions 4
Les chaînes de caractères existent 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.
À faire cette semaine
- Démarrer le travail pratique numéro II.
Conclusion
Notions importantes vues cette semaine
- Fonctions liées aux codes ASCII : Chr et 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