Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tester le changement de casse dans un string

5 réponses
Avatar
Mill
Bonjour à tous,

je cherche à détecter un changement de casse (passage majuscule à
minuscule).dans une chaine de caractère en vbs.

si qq un à une idee plz

merci d'avance

Mill

5 réponses

Avatar
Patrice Henrio
Peux-tu en dire plus ?

Pour un début voici ce que je propose

Dim Minuscule as boolean

Minuscule=(Asc(S)>97)
For I=2 to Len(S)
If (Asc(mid(S,I,1))>97)<>Minuscule then
Minuscule=Not(Minuscule)
MsgBox "Passage en " & IIf(Minuscule, "Minuscule", "Majuscule" )
End If
Next I


"Mill" a écrit dans le message de news:
%
Bonjour à tous,

je cherche à détecter un changement de casse (passage majuscule à
minuscule).dans une chaine de caractère en vbs.

si qq un à une idee plz

merci d'avance

Mill



Avatar
Jean-Marc
Hello,

il me semble que ça ne fonctionne pas du tout.
Faire les test avec :
"coucou les amis" => 2 passages en majuscule détectés


Ceci en revanche semble fonctionner:
Private Sub DetectChangeCase(ByVal s As String)
Dim length As Long
Dim i As Integer
Dim state As Boolean

state = isLower(Mid$(s, 1, 1))
length = Len(s)
For i = 2 To length
If isAlpha(Mid$(s, i, 1)) Then
If isLower(Mid$(s, i, 1)) <> state Then
MsgBox "changement pos = " & i
End If
state = isLower(Mid$(s, i, 1))
End If
Next i

End Sub


Private Function isLower(ByVal c As String) As Boolean
If (c >= "a") And (c <= "z") Then
isLower = True
Else
isLower = False
End If
End Function

Private Function isAlpha(ByVal c As String) As Boolean
Dim uC As String * 1

uC = UCase$(c)
If (uC >= "A") And (uC <= "Z") Then
isAlpha = True
Else
isAlpha = False
End If
End Function


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."


"Patrice Henrio" a écrit dans le message de
news:
Peux-tu en dire plus ?

Pour un début voici ce que je propose

Dim Minuscule as boolean

Minuscule=(Asc(S)>97)
For I=2 to Len(S)
If (Asc(mid(S,I,1))>97)<>Minuscule then
Minuscule=Not(Minuscule)
MsgBox "Passage en " & IIf(Minuscule, "Minuscule", "Majuscule" )
End If
Next I


"Mill" a écrit dans le message de news:
%
> Bonjour à tous,
>
> je cherche à détecter un changement de casse (passage majuscule à
> minuscule).dans une chaine de caractère en vbs.
>
> si qq un à une idee plz
>
> merci d'avance
>
> Mill
>




Avatar
Patrice Henrio
Tout dépend de ce que l'on appelle passage en majuscule

A défaut de plus amples informations, je me suis contenté de considérer
comme majuscule uniquement les caractères de codes inférieurs à 97.
On peut sur le même principe créer une fonction booléenne Estminuscule qui
renvoie true lorsque le caractère est minuscule

Function Estminuscule(A as Char) as boolean
EstMinuscule=(Instr("abcdefghijklmnopqrstuvwxyzéèçàùâêîûô",A)>0)
End function

D'ailleurs tu as parfaitement repris l'algo (un peu brut de décoffrage je
l'admets).
Je te signale une amélioration (à mon humble avis)

Private Function isLower(ByVal c As String) As Boolean
IsLower=( (c >= "a") And (c <= "z"))
End Function

Private Function isAlpha(ByVal c As String) As Boolean
Dim uC As String * 1
uC = UCase$(c)
isAlpha=( (uC >= "A") And (uC <= "Z") )
End Function
Par contre je suis d'accord sur l'utilisation de la variable uC qui permet
d'appeler une seule fois la fonction UCase

On peut aussi utiliser cela à la place des tests

IsLower=(InStr("abcdefghijklmnopqrstuvwxyz",c)>0)
isAlpha=(Instr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",UCase$(c))>0)


salut à tous

clin d'oeil : "There are only 10 kind of people, those who understand
boolean and those who don't."

"Jean-Marc" a écrit dans le message de news:
42b7023e$0$343$
Hello,

il me semble que ça ne fonctionne pas du tout.
Faire les test avec :
"coucou les amis" => 2 passages en majuscule détectés


Ceci en revanche semble fonctionner:
Private Sub DetectChangeCase(ByVal s As String)
Dim length As Long
Dim i As Integer
Dim state As Boolean

state = isLower(Mid$(s, 1, 1))
length = Len(s)
For i = 2 To length
If isAlpha(Mid$(s, i, 1)) Then
If isLower(Mid$(s, i, 1)) <> state Then
MsgBox "changement pos = " & i
End If
state = isLower(Mid$(s, i, 1))
End If
Next i

End Sub


Private Function isLower(ByVal c As String) As Boolean
If (c >= "a") And (c <= "z") Then
isLower = True
Else
isLower = False
End If
End Function

Private Function isAlpha(ByVal c As String) As Boolean
Dim uC As String * 1

uC = UCase$(c)
If (uC >= "A") And (uC <= "Z") Then
isAlpha = True
Else
isAlpha = False
End If
End Function


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."


"Patrice Henrio" a écrit dans le message de
news:
Peux-tu en dire plus ?

Pour un début voici ce que je propose

Dim Minuscule as boolean

Minuscule=(Asc(S)>97)
For I=2 to Len(S)
If (Asc(mid(S,I,1))>97)<>Minuscule then
Minuscule=Not(Minuscule)
MsgBox "Passage en " & IIf(Minuscule, "Minuscule", "Majuscule" )
End If
Next I


"Mill" a écrit dans le message de news:
%
> Bonjour à tous,
>
> je cherche à détecter un changement de casse (passage majuscule à
> minuscule).dans une chaine de caractère en vbs.
>
> si qq un à une idee plz
>
> merci d'avance
>
> Mill
>








Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le message de
news:

Hello,

Tout dépend de ce que l'on appelle passage en majuscule

A défaut de plus amples informations, je me suis contenté de considérer
comme majuscule uniquement les caractères de codes inférieurs à 97.



Oui ok.

On peut sur le même principe créer une fonction booléenne Estminuscule qui
renvoie true lorsque le caractère est minuscule

Function Estminuscule(A as Char) as boolean
EstMinuscule=(Instr("abcdefghijklmnopqrstuvwxyzéèçàùâêîûô",A)>0)
End function



ok.

D'ailleurs tu as parfaitement repris l'algo (un peu brut de décoffrage je
l'admets).
Je te signale une amélioration (à mon humble avis)

Private Function isLower(ByVal c As String) As Boolean
IsLower=( (c >= "a") And (c <= "z"))
End Function

Private Function isAlpha(ByVal c As String) As Boolean
Dim uC As String * 1
uC = UCase$(c)
isAlpha=( (uC >= "A") And (uC <= "Z") )
End Function




Oui, c'est bien sur bien meilleur comme cela.


Par contre je suis d'accord sur l'utilisation de la variable uC qui permet
d'appeler une seule fois la fonction UCase

On peut aussi utiliser cela à la place des tests

IsLower=(InStr("abcdefghijklmnopqrstuvwxyz",c)>0)
isAlpha=(Instr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",UCase$(c))>0)



Bien aussi, c'est vrai.


salut à tous

clin d'oeil : "There are only 10 kind of people, those who understand
boolean and those who don't."



héhé :-)))

La version Geek de la mère Denis aurait dit:
"Ah ça c'est (1=1), ça !"


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Mill
bonjour messieurs

merci beaucoup pour votre aide !!

avec cet algo et ce code j ai reussi a coder ce dont j avais besoin !

Bonne continuation

Mill


"Jean-Marc" a écrit dans le message de news:
42b71a7a$0$3783$
"Patrice Henrio" a écrit dans le message de
news:

Hello,

Tout dépend de ce que l'on appelle passage en majuscule

A défaut de plus amples informations, je me suis contenté de considérer
comme majuscule uniquement les caractères de codes inférieurs à 97.



Oui ok.

On peut sur le même principe créer une fonction booléenne Estminuscule
qui
renvoie true lorsque le caractère est minuscule

Function Estminuscule(A as Char) as boolean
EstMinuscule=(Instr("abcdefghijklmnopqrstuvwxyzéèçàùâêîûô",A)>0)
End function



ok.

D'ailleurs tu as parfaitement repris l'algo (un peu brut de décoffrage je
l'admets).
Je te signale une amélioration (à mon humble avis)

Private Function isLower(ByVal c As String) As Boolean
IsLower=( (c >= "a") And (c <= "z"))
End Function

Private Function isAlpha(ByVal c As String) As Boolean
Dim uC As String * 1
uC = UCase$(c)
isAlpha=( (uC >= "A") And (uC <= "Z") )
End Function




Oui, c'est bien sur bien meilleur comme cela.


Par contre je suis d'accord sur l'utilisation de la variable uC qui
permet
d'appeler une seule fois la fonction UCase

On peut aussi utiliser cela à la place des tests

IsLower=(InStr("abcdefghijklmnopqrstuvwxyz",c)>0)
isAlpha=(Instr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",UCase$(c))>0)



Bien aussi, c'est vrai.


salut à tous

clin d'oeil : "There are only 10 kind of people, those who understand
boolean and those who don't."



héhé :-)))

La version Geek de la mère Denis aurait dit:
"Ah ça c'est (1=1), ça !"


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."