1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| Option Explicit
'ici nous définissons une variable du type défini par l'utilisateur
' c'est ce que l'on appelle une structure
'une structure peut comporter un ou plusieurs éléments,
'chacun d'entre eux correspondant à un type de variable (de son choix).
Private Type mime_marceau
'ici, donc, une structure composée de 2 éléments (minuscules et accents), chacun de type unteger
'puisqu'ils sont destinés à recevoir un entier.
minuscules As Integer
accents As Integer
End Type
Private Sub Command1_Click()
' je ne reviendrai pas sur la lecture "en bloc" du texte de ton fichier,
'puisque j'ai déjà eu l'occasion de te l'exposer
Dim toto As String, FF As Integer: FF = FreeFile
Open "d:\essai.txt" For Input As #FF
toto = Input(LOF(FF), #FF)
Close #FF
'=============================================
' dans ce qui suit, je me réfère à chacun des 2 éléments de la structure
' puisque j'ai typé ma fonction cherchons_si_accents comme la structure mime_marceau
' en la déclarant Private Function cherchons_si_accents(ByVal t1 As String) As mime_marceau
MsgBox "j'ai trouvé " & vbCrLf & _
cherchons_si_accents(toto).minuscules & " minuscule(s) non accentuée(s)" & vbCrLf & "et" & _
vbCrLf & cherchons_si_accents(toto).accents & " accent(s) (minuscules ou majuscules)"
End Sub
Private Function cherchons_si_accents(ByVal t1 As String) As mime_marceau
' en déclarant clown() as byte, je déclare un tableau d'octets
Dim lecirque As String, I As Integer, clown() As Byte, quoi As Integer
lecirque = "ÀàÁáÂâÃãÄäÅåÇçÈèÉéÊêËëÌìÍíÎîÏïÐðÑñÒòÓóÔôÕõÖöØøÙùÚúÛûÜüÝýÞþ"
' ce qui suit a pour fonction celle d'alimenter mon tableau d'octets clown
' chaque élément du tableau clown sera, dans l'ordre, la valeur ascii de la lettre ayant
' le "rang" X, en commençant par la 1ère et jusqu'à la dernière.
' à noter que (mais avec plus de lenteur) on aurait pu utiliser une boucle
'for i = 1 to Len(t1)
' et déterminer, grâce à la fonction Mid, chaque caractère, 1 par 1
'
clown = StrConv(t1, vbFromUnicode)
For I = 0 To UBound(clown)
quoi = clown(I)
' j'aurais pu commencer à plus grand que 122 (valeur ascii de la lettre z) mais
' ai préféré rester dans le "safe-side"
If quoi > 122 Then ' si donc > que ascii de la lettre z
' et qu'en plus, caractère présent dans ma chaîne lecirque, alors
' en te rappelant que la fonction Instr relève la position d'une occurance de chaîne
' dans une autre chaine.
' si cette position = 0 : pas d'occurrence et on n'en parle plus
' si # 0 : il y a une occurrence
' il se trouve que la valeur de True est toute valeur différente de 0
' on peut donc écrire If InStr(lecirque, Chr(quoi)) sans nécessairement avoir
' à préciser If InStr(lecirque, Chr(quoi)) = True
' Enfin, et parce qu'à ce niveau nous avons à comparer des chaînes et non leur valeur
'ASCII, nous utilisons la fonction Chr (Chr(65), par exemple, correspond à la lettre A, Chr(66)
' à la lettre B, etc...)
If InStr(lecirque, Chr(quoi)) Then
' et nous incrémentons alors d'une unité l'élément accents de la structure retournée par la fonction
cherchons_si_accents.accents = cherchons_si_accents.accents + 1
End If
ElseIf Chr(quoi) <> UCase(Chr(quoi)) Then
' si pas dans le cas précédent, nous faisons, pour chaque caractère analysé (puisque nous sommes
' dans une boucle, la comparaison de ce qu'il est et de ce qu'il serait en majuscule
' tu connais déjà le principe : si défférent : le caractère était donc en minuscule
' et nous incrémentons alors d'une unité l'élément minuscules de la structure retournée par la fonction
cherchons_si_accents.minuscules = cherchons_si_accents.minuscules + 1
End If
Next
End Function |
Partager