Page 1 sur 1

[..] Transformer un mot en chiffre

Posté : mar. 08 juin 2010 16:53
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 !

Re: [..] transformer un mot en chiffre

Posté : mar. 08 juin 2010 18:10
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)
 

Re: [..] transformer un mot en chiffre

Posté : mar. 08 juin 2010 23:36
par Mikaas
Merci mais j'aurai souhaité pouvoir moi même définir quel chiffre irai avec quel lettre

Re: [..] transformer un mot en chiffre

Posté : mar. 08 juin 2010 23:57
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.

Re: [..] transformer un mot en chiffre

Posté : mer. 09 juin 2010 17:31
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.

Re: [..] Transformer un mot en chiffre

Posté : mer. 09 juin 2010 22:14
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.

Re: [..] Transformer un mot en chiffre

Posté : mer. 09 juin 2010 22:42
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

Re: [..] Transformer un mot en chiffre

Posté : mer. 09 juin 2010 23:12
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)

Re: [..] Transformer un mot en chiffre

Posté : jeu. 10 juin 2010 15:27
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.