[..] Transformer un mot en chiffre

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Mikaas
Niveau 5
Niveau 5
Messages : 144
Enregistré le : ven. 18 sept. 2009 04:21
Status : Hors ligne

[..] Transformer un mot en chiffre

#1

Message par Mikaas »

Voila je voudrais faire un petit script pour modifier un mot en chiffre cependant je ne sais pas si est possible de faire décortiquer un mot lettre par lettre, si ?

ex : Bonjour

il va prendre le B le changer en 2 le o en 5 le n en 8 etc...

es ce possible ?
doit t'il lire dans un ini ou .txt ?

merci !
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] transformer un mot en chiffre

#2

Message par GaRydelaMer »

Voila un petit bout de code

les 10 premières lettres sont remplacé par le nombre avec 0 devant, pour pouvoir refaire l'opération inverse, découpé par 2 chiffrre et retrouvé la bonne lettre.

Code : Tout sélectionner

#Include <Array.au3>
#Include <Misc.au3>
;; Fonctions ------------------------------------------------
;       Conversion d'une chaine en nombre
;           chaque carractère sur 2 chiffres
;
;   _Text2Number($Text)
;
;   _Number2Text($Num)
;
; GaRy delaMer
;------------------------------------------------------------
Global $_sTEXT2NUM = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàâäéèêëö"
Global $_aTEXT2NUM = StringSplit($_sTEXT2NUM, "", 2)

Func _Text2Number($Text, $iCase = 0)
    $Text = StringSplit($Text, "")
    Local $return = ""
    For $i = 1 To $Text[0]
        Local $Index = _ArraySearch($_aTEXT2NUM, $Text[$i], 0, 0, $iCase)
        $return &= _Iif($Index < 10, "0" & $Index, $Index)
    Next
    Return $return
EndFunc

Func _Number2Text($Num)
    Local $len = StringLen($Num)
    Local $return = ""
    For $i = 1 To $len Step 2
        Local $Index = StringMid($Num, $i, 2)
        $return &= $_aTEXT2NUM[Number($Index)]
    Next
    Return $return
EndFunc;~ _ArrayDisplay($a0)

;; Exemples
Local $s = "Bon jour", $r = _Text2Number($s, 1)
MsgBox(0, "", $s & "=>" & $r)

$s = _Number2Text($r)
MsgBox(0, "", $r & "=>" & $s)
 
Mikaas
Niveau 5
Niveau 5
Messages : 144
Enregistré le : ven. 18 sept. 2009 04:21
Status : Hors ligne

Re: [..] transformer un mot en chiffre

#3

Message par Mikaas »

Merci mais j'aurai souhaité pouvoir moi même définir quel chiffre irai avec quel lettre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] transformer un mot en chiffre

#4

Message par Tlem »

Hé bien adaptez le code. :roll:

Code : Tout sélectionner

Global $_sTEXT2NUM = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZàâäéèêëö"
Global $_aTEXT2NUM = StringSplit($_sTEXT2NUM, "", 2)
Ce code crée le tableau des lettres.
Créez un autre tableau de 61 nombres correspondant à vos attributions de nombre aux lettres sur la même base que le code ci-dessus ...
Vous serez par contre obligé d'utiliser un caractère de séparation et d'adapter le StringSplit. :mrgreen:

Ensuite, vous n'avez qu'à modifier le code pour remplacer telle lettre par son équivalent numérique. Les indexes étend les même cela ne devrait pas vous poser de problèmes.
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é".
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] transformer un mot en chiffre

#5

Message par GaRydelaMer »

Bonjour

pour le fun j'ai modifier un peu le code.

Comme le dit Tlem, il suffit de choisir la séquence de lettre qui seront transformé dans la variable $_sTEXT2NUM.
Ensuite la fonction va le coder et remplacer chaque caractère de la chaine $Text, par l'index du tableau $_aTEXT2NUM qui correspond au caractère.

Ce tableau prend pour index 0 le premier caractère de $_sTEXT2NUM.

SI la fonction trouve pas de l'index alors je laisse le caractère.

L'autre fonction fais l'inverse.

Code : Tout sélectionner

Global $_sTEXT2NUM = "aàâæAÀÂÆcçCÇeéèêëEÉÈÊËiîïiIÎÏoôœOÔŒUuùûüÙÛÜyÿYŸ bBdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXzZ"
Global $_aTEXT2NUM = StringSplit($_sTEXT2NUM, "", 2)

Func _Text2Number($Text, $iCase = 0)
    Local $return = ""
    $Text = StringSplit($Text, "")
    For $i = 1 To $Text[0]
        Local $Index = _ArraySearch($_aTEXT2NUM, $Text[$i], 0, 0, $iCase)
        If $Index > -1 Then
            $return &= _Iif($Index < 10, "0" & $Index, $Index)
        Else
            $return &= $Text[$i]
        EndIf
    Next
    Return $return
EndFunc

Func _Number2Text($Num)
    Local $Start = 1, $Len = StringLen($Num), $return = ""
    Do
        Local $Pos = StringMid($Num, $Start, 2)
        If StringRegExp($Pos, "\d{2}") Then
            Local $Index = Number($Pos)
            If $Index < UBound($_aTEXT2NUM) Then
                $return &= $_aTEXT2NUM[$Index]
            Else
                $return &= $Pos
            EndIf
            $Start += 2
        Else
            $return &= StringMid($Num, $Start, 1)
            $Start += 1
        EndIf
    Until $Start > $len
    Return $return
EndFunc
 

Code : Tout sélectionner

;; Exemples 1
Local $s = "Bonjour madame la Marquise"
$r = _Text2Number($s, 1)
ConsoleWrite($s & "=>" & $r & @LF)
$s = _Number2Text($r)
ConsoleWrite($r & "=>" & $s & @LF & @LF)
 
Bonjour madame la Marquise=>4929665829367247640050006412476200476500727036227412
4929665829367247640050006412476200476500727036227412=>Bonjour madame la Marquise

Code : Tout sélectionner

;; Exemples 2 remplace les voyelles et la ponctuation
$_sTEXT2NUM = "aeiouy,;."
$_aTEXT2NUM = StringSplit($_sTEXT2NUM, "", 2)
$s = "Bonjour, madame la Marquise."
$r = _Text2Number($s, 1)
ConsoleWrite($s & "=>" & $r & @LF)
$s = _Number2Text($r)
ConsoleWrite($r & "=>" & $s & @LF)
 
Bonjour, madame la Marquise.=>B03nj0304r06 m00d00m01 l00 M00rq0402s0108
B03nj0304r06 m00d00m01 l00 M00rq0402s0108=>Bonjour, madame la Marquise.
Mikaas
Niveau 5
Niveau 5
Messages : 144
Enregistré le : ven. 18 sept. 2009 04:21
Status : Hors ligne

Re: [..] Transformer un mot en chiffre

#6

Message par Mikaas »

J'ai compris pas mal chose en les décortiquant mais je pensai plus a un script du genre 1 lettre = 1 Chiffre prédéfini soit meme

ex :

a = 2(1)
b = 2(2)
c = 2(3)
d = 3(1)

ceci correspond au touche d'un mobile 2 = touche 2 / (1) = le nombre d'appuis.

Bonjour = 2(2)6(3)6(2)5(1)6(3)8(2)7(3)
en cas d'espace on mets un - ou /

donc je pensais a un raisonnement du genre "si b est entré convertir en 2(2) si ..."
enfin si cela est plus courant ou non je ne sais pas du tous :)

sur ce je continu a essayer ;)
merci pour l'aide.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Transformer un mot en chiffre

#7

Message par Tlem »

J'ai vraiment parfois l'impression de ne pas être lu par certains ... :evil:

Je répète donc encore une fois :
Tableau 1 = Toutes les lettres et caractères à utiliser
Tableau 2 = les nombres correspondants aux lettres et caractères du tableau 1 (dans le même ordre).

Par rapport à votre exemple, a = 2(1), b = 2(2), c = 2(3), d = 3(1)

Pour convertir une chaine, vous n'avez qu'a lire celle-ci caractère par caractère.
Pour chaque caractère, utilisez la fonction _ArraySearch sur le tableau 1.
Cette fonction vous renverra l'index du caractère trouvé.
Utilisez cet index pour construire la nouvelle chaine a partir du tableau 2.


Edit :
En prévision des questions suivantes, voici un code d'exemple selon vos données ci-dessus.
Essayez quand même de trouver par vous même avant de lire. :P
► Afficher le texte
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é".
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Transformer un mot en chiffre

#8

Message par GaRydelaMer »

Merci Tlem ;)

j'ai aussi commencé un bout de code pour répondre à la dernière demande

je partais sur un tableau à 2 dimensions

Code : Tout sélectionner

#Include <Array.au3>
#Include <Misc.au3>

Global $_aTEXT2PHONE[33][3] = [ _
        [" ", 1, 1], _ ; La lettre, la touche, le nombre de répétition de la touche
        ["a", 2, 1], _
        ["b", 2, 2], _
        ["c", 2, 3], _
        ["d", 3, 1], _
        ["e", 3, 2], _
        ["f", 3, 3], _
        ["é", 3, 4], _
        ["è", 3, 5], _
        ["ê", 3, 6], _
        ["g", 4, 1], _
        ["h", 4, 2], _
        ["i", 4, 3], _
        ["j", 5, 1], _
        ["k", 5, 2], _
        ["l", 5, 3], _
        ["m", 6, 1], _
        ["n", 6, 2], _
        ["o", 6, 3], _
        ["p", 7, 1], _
        ["q", 7, 2], _
        ["r", 7, 3], _
        ["s", 7, 4], _
        ["t", 7, 1], _
        ["u", 7, 2], _
        ["v", 7, 3], _
        ["w", 9, 1], _
        ["x", 9, 2], _
        ["y", 9, 3], _
        ["z", 9, 4], _
        ["*", "*", 1], _
        ["+", "*", 2], _
        ["#", "#", 1]]

_ArrayDisplay($_aTEXT2PHONE)

Func _Text2Phone($Text)
    Local $return = ""
    $Text = StringSplit($Text, "")
    For $i = 1 To $Text[0]
        Local $Index = _ArraySearch($_aTEXT2PHONE, $Text[$i], 0, 0, 0, 0, 1, 0)
        ConsoleWrite($Text[$i] & "=>" & $Index & @LF)
        If $Index > -1 Then
            $return &= $_aTEXT2PHONE[$Index][1] & "(" & $_aTEXT2PHONE[$Index][2] & ")"
        Else
            $return &= $Text[$i]
        EndIf
    Next
    Return $return
EndFunc

;; Exemples 1
Local $s = "Bonjour Mme # + * la Marquise"
Local $r = _Text2Phone($s)
ConsoleWrite($s & "=>" & $r & @LF)
Mikaas
Niveau 5
Niveau 5
Messages : 144
Enregistré le : ven. 18 sept. 2009 04:21
Status : Hors ligne

Re: [..] Transformer un mot en chiffre

#9

Message par Mikaas »

J'ai lu la n'est pas le souci oO'
juste que je ne suis pas calé du tous en autoit je ne fais que des petits script pour m'amuser un peu histoire de m'occuper.

tous les script que j'ai fais jusqu'a présent ne sont que des automatisation basic
j'ai encore beaucoup de mal avec les variantes un peu plus complexe surtout pour ne pas aider je ne parle mais pas du tous anglais :(

alors j'essai pas mal deja avant de faire le script en francais (enfin redigé) puis de voir se que je peux faire avec autoit...

mais bon je pensai que si j'avais un souci d'ordre de comprehension je pouvais poster une demande :( mais si c'est pour ce faire rembarrer pas de souci je post plus :(

je sais que cela peu vous agacer parfois mais c'est un peu le principe hein :D
il faut de tous pour faire un monde des bons et des noobs xD

enfin bon j'essai quand meme de comprendre quand meme hein :)
merci pour les exemples.
Répondre