Semaine 06 - ena. · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car...

16
INF130 - Ordinateurs et programmation Semaine 06 Document présenté par Frédérick Henri et conçu par les enseignants en informatique du SEG

Transcript of Semaine 06 - ena. · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car...

Page 1: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

INF130 - Ordinateurs et programmation

Semaine 06

Document présenté par Frédérick Henriet conçu par les enseignants en informatique du SEG

Page 2: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

Caractères- Table ASCII- Conversion

Chaînes de caractères- Fonctions prédéfinies- Exercices

Objectifs du cours

INF130 - Cours 05 Objectifs

Page 3: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 4: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 5: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 6: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

Écrivez une fonction qui convertit un caractère représentant une lettre minuscule en lettremajuscule.

Exercice

INF130 - Cours 05 Exercice 1

Page 7: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 8: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 9: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

É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

Page 10: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 11: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

É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

Page 12: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 13: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 14: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

É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

Page 15: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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

Page 16: Semaine 06 - ena.  · PDF fileCode Car Code Car Code Car Code Car Code Car Code Car Code Car 32 64 @ 96 ` 128 € 160 192 À 224 ... 53 5 85 U 117 u 149 • 181 µ 213 Õ 245

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