[FUNC] Convertit une chaine AZERTY <=> QWERTY

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

[FUNC] Convertit une chaine AZERTY <=> QWERTY

#1

Message par Tlem »

Pour les besoins d'une question du forum, voici une fonction qui permet de convertir une chaine AZERTY en Chaine QWERTY et vice versa.

Le code pourrait être très certainement diminuer en évitant de répéter le code de conversion, mais je trouve que c'est très clair en l'état, et de toutes façons, on est pas à 10 lignes prêt ... :lol:
En l'état, seul les lettres sont prises en compte, donc si quelqu'un à le temps de faire la table de conversion, je mettrais à jour le code. ;)

Code : Tout sélectionner

Func _KeybConvert($sString, $Type = 1) ; 1 = AZERTY To QWERTY  2 = QWERTY To AZERTY
    If $sString = '' Then
        SetError(1)
        Return ''
    EndIf
    If $Type <> 1 And $Type <> 2 Then
        SetError(1)
        Return ''
    EndIf
    Local $Azerty = "aAmMqQwWzZ;:,.!/?%*$&'-@+=<>[]{}"
    Local $Qwerty = "qQ,?aAzZwWmM;:!&§(_'èù)é+=./^$¨£"
    Local $Char, $Res, $j, $i
    Local $aAzerty = StringSplit($Azerty, "")
    Local $aQwerty = StringSplit($Qwerty, "")

    Switch $Type
        Case 1 ; AZERTY To QWERTY
            For $j = 1 To StringLen($sString)
                $Char = StringMid($sString, $j, 1)
                If StringInStr($Azerty, $Char, 1) Then
                    For $i = 1 To $aAzerty[0]
                        If $Char == $aAzerty[$i] Then
                            $Char = $aQwerty[$i]
                            ExitLoop
                        EndIf
                    Next
                EndIf
                $Res &= $Char
            Next

        Case 2 ; QWERTY To AZERTY
            For $j = 1 To StringLen($sString)
                $Char = StringMid($sString, $j, 1)
                If StringInStr($Qwerty, $Char, 1) Then
                    For $i = 1 To $aQwerty[0]
                        If $Char == $aQwerty[$i] Then
                            $Char = $aAzerty[$i]
                            ExitLoop
                        EndIf
                    Next
                EndIf
                $Res &= $Char
            Next
    EndSwitch
    Return $Res
EndFunc   ;==>_KeybConvert
Exemple d'utilisation :

Code : Tout sélectionner

MsgBox(0, 'azerty => qwerty', _KeybConvert('azerty', 1))
MsgBox(0, 'qwerty => azerty', _KeybConvert('qwerty', 2))
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Adenadels
Niveau 2
Niveau 2
Messages : 15
Enregistré le : dim. 24 mai 2009 11:22
Localisation : Strasbourg
Status : Hors ligne

Re: [FUNC] Convertit une chaine AZERTY <=> QWERTY

#2

Message par Adenadels »

Il n'y a toujours pas de différence entre les majuscules et les minuscules alors qu'elles sont présentes dans les chaînes $Azerty et $Qwerty.
MsgBox(0, 'azerty => qwerty', _KeybConvert('azerty', 1)) donne qwerty
et
MsgBox(0, 'azerty => qwerty', _KeybConvert('AZERTY', 1)) donne qwERTY au lieu de QWERTY attendu

ok, pour les lettres on s'en sort, mais il y a une différence en M et m qui demandent à taper soit la touche ? ou , ou encore si on veut un . ou un /.

qq caractères en plus :

Code : Tout sélectionner

$Azerty = "aAmMqQwWzZ;:,.!/?%*$&'-@+=<>[]{}"
$Qwerty = "qQ,?aAzZwWmM;:!&§(_'èù)é+=./^$¨£"
Je ne sais où trouver la touche _ en qwerty (je travaille avec une copie d'écran d'un clavier qwerty), et le traitement de " est délicat, puisque délimiteur de chaîne (' étant déjà utilisé lui).. mais on trouve rarement " dans un mot de passe par exemple... et il semblerait que la touche ² soit ' et " en qwerty !

Enfin, afin que mon programme, voir forum initial (viewtopic.php?f=3&t=4679), puisse fonctionner (l'ulilisateur a la possibilité de modifier les deux chaines Azerty et Qwerty et donc de convertir d'autres choses), dans votre fonction je me suis permis de mettre $Azerty et $Qwerty en paramètres optionnels :

Code : Tout sélectionner

Func _KeybConvert($sString, $Type = 1, $Azerty = "aAmMqQwWzZ;:,.!/?%*$&'-@+=<>[]{}", $Qwerty = "qQ,?aAzZwWmM;:!&§(_'èù)é+=./^$¨£" ) ; $Type 1 = AZERTY To QWERTY  $Type 2 = QWERTY To AZERTY
Salutations
Jean-Luc
Salutations
Jean-Luc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [FUNC] Convertit une chaine AZERTY <=> QWERTY

#3

Message par Tlem »

Adenadels a écrit :Il n'y a toujours pas de différence entre les majuscules et les minuscules alors qu'elles sont présentes dans les chaînes $Azerty et $Qwerty.
Houps ...
J'avais effectivement oublié cette contrainte (corrigé).
Adenadels a écrit :ok, pour les lettres on s'en sort, mais il y a une différence en M et m qui demandent à taper soit la touche ? ou , ou encore si on veut un . ou un /.
Très juste. J'ai corrigé en prenant en compte votre conversion. ;)
Adenadels a écrit :je me suis permis de mettre $Azerty et $Qwerty en paramètres optionnels
Le principe de la fonction étant de convertir de l'un à l'autre, il serait bien mieux de mettre l'intégralité des caractères différents. Cela dit vous êtes libre d'adapter à vos besoins. ;)

Merci pour votre aide.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre