# [SOLVED] Convert letters to specific numbers

## Recommended Posts

Okay so i'm really bad at this so I need some help. I've been looking all over to try to find a code that I can edit to process what I need, but I can't find any.

I want to convert, lets say, A to "11.", B to "12." and so on, and yes the period is included. But I haven't been able to find out how to do this.

So is it possible to do this? It would save tons of time.

Edited by Cookid
Solved

##### Share on other sites

Something simple like this?:

```consolewrite( Convert("A") & @crlf)
consolewrite( Convert("B") & @crlf)
consolewrite( Convert("Z") & @crlf)

Func Convert(\$char)
\$char=StringUpper(\$char)
\$base=11
\$A_asc=65
return (asc(\$char)-\$A_asc+\$base)&"."
EndFunc```

Jos

Live for the present,
Dream of the future,
Learn from the past.

##### Share on other sites

Another way to convert would be declaring a 2D array first then looping through it to convert your character. Not as simple as Jos example but you can convert any letter to anything you want it to be!

```#include <Array.au3>
#include <String.au3>

Global \$arr1[26][2] = [["A", "11."], ["B", "12."]] ;ect ect

Func Convert(\$char)
For \$i = 0 To UBound(\$arr1) - 1 Step 1
If \$char = \$arr1[\$i][0] Then
\$char = \$arr1[\$i][1]
Return(\$char)
EndIf
Next
EndFunc```

Also, Hi everyone (first post)

Edited by Davidowicza
coding fix

##### Share on other sites

David is correct - creating an array is the way to go. Jos's approach also works.

To put it simply - coding is an art, and a dark art at that.

##### Share on other sites
On 9/18/2018 at 2:45 PM, Jos said:

Something simple like this?:

```consolewrite( Convert("A") & @crlf)
consolewrite( Convert("B") & @crlf)
consolewrite( Convert("Z") & @crlf)

Func Convert(\$char)
\$char=StringUpper(\$char)
\$base=11
\$A_asc=65
return (asc(\$char)-\$A_asc+\$base)&"."
EndFunc```

Jos

This works nice, but by the way it's setup the letters end up getting translated incorrectly, as I said it's very specific and I'm not sure how to adjust it to that.

While A and B are correct on there, as 11 and 12, Z would be 56. And I don't think it can be modified correctly with the "StringUpper" fuction.

Sorry for how complicated this is. If needed this is all the correct translations:

Spoiler

A = 11. B = 12. C = 13. D = 14. E = 15.
F = 21. G = 22. H = 23. I = 24. J = 25.
K = 31. L = 32. M = 33. N = 34. O = 35.
P = 41. Q = 42. R = 43. S = 44. T = 45.
U = 51. V = 52. W = 53. X = 54. Y = 55. Z = 56.

Edited by Cookid

##### Share on other sites

Just use Davids method above, that way you can customize your numbers as required.

##### Share on other sites
18 minutes ago, Subz said:

Just use Davids method above, that way you can customize your numbers as required.

Well i've tried using it but I can't get it to output anything else but 0.  I've tried stating the "ARRL" as a letter but that doesnt work. Is there a specific thing I have to do for it to pick a letter?

##### Share on other sites

Not sure how your coding it but see example here:

```Global \$aConversion[26][2] = [["A", "11."], ["B", "12."], ["C", "13."], ["D", "14."], ["E", "15."], ["F", "21."], ["G", "22."], ["H", "23."], ["I", "24."], ["J", "25."], ["K", "31."], ["L", "32."], ["M", "33."], ["N", "34."], ["O", "35."], ["P", "41."], ["Q", "42."], ["R", "43."], ["S", "44."], ["T", "45."], ["U", "51."], ["V", "52."], ["W", "53."], ["X", "54."], ["Y", "55."], [" Z", "56."]]

For \$i = 0 To UBound(\$aConversion) - 1
MsgBox(4096, "Conversion", \$aConversion[\$i][0] & " = " & Convert(\$aConversion[\$i][0]), 1)
Next

Func Convert(\$sChar)
For \$i = 0 To UBound(\$aConversion) - 1 Step 1
If \$sChar = \$aConversion[\$i][0] Then
\$sChar = \$aConversion[\$i][1]
Return(\$sChar)
EndIf
Next
EndFunc```

Edited by Subz
Forgot to add the function doh

##### Share on other sites
16 hours ago, Cookid said:

Well i've tried using it but I can't get it to output anything else but 0.  I've tried stating the "ARRL" as a letter but that doesnt work. Is there a specific thing I have to do for it to pick a letter?

It'll be easier to help if you post your code if you are still having issues.

##### Share on other sites
1 hour ago, Davidowicza said:

It'll be easier to help if you post your code if you are still having issues.

My problem has been fixed. I don't know how to set it as solved though

##### Share on other sites

@Cookid
Edit the first post, setting in the title "Solved"

Spoiler

Thoughts:

• I will always thank you for the time you spent for me.
I'm here to ask, and from your response, I'd like to learn.
By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

##### Share on other sites

This is an exercise in "It can be done".

```; https://www.autoitscript.com/forum/topic/195770-solved-convert-letters-to-specific-numbers/?do=findComment&comment=1403424
Local \$iGroupSize = 5
For \$i = 65 To 90
;ConsoleWrite(Chr(\$i) & " = " & _Alpha2Numeric(Chr(\$i), 3, 8, 12) & (Mod(\$i - 64, 8) ? " " : @CRLF))
ConsoleWrite(Chr(\$i) & " = " & _Alpha2Numeric(Chr(\$i), 11, \$iGroupSize, 10) & (Mod(\$i - 64, \$iGroupSize) ? " " : "   <-- a group" & @CRLF))
Next
ConsoleWrite("        <-- sequencially carried on from the previous group" & @CRLF)

; Parameters:-
; \$char       - The character to be converted to a number.
; \$base       - The starting number for "A".  The first character in the first group.
; \$iGroupSize - The maximum number of characters in a group.
; \$iGroupJump - A number that each group is incremented by.
;
Func _Alpha2Numeric(\$char, \$base = 11, \$iGroupSize = 5, \$iGroupJump = 10)
If \$iGroupJump < \$iGroupSize Then MsgBox(0, "Warning", "Duplicate numbers will be assigned to different letters")
\$char = StringUpper(\$char)
Local \$A_asc = 65
Local \$iPosAtEnd = AscW("Z") - Mod(26, \$iGroupSize) ; Unicode code of a last character of last whole group (of \$iGroupSize size).
If AscW(\$char) > \$iPosAtEnd Then _ ; The last incomplete group will sequencially continue on from the second last group of numbers. i.e. \$iGroupJump will not be used on the last incomplete group.
Return _Alpha2Numeric(ChrW(\$iPosAtEnd), \$base, \$iGroupSize, \$iGroupJump) + AscW(\$char) - \$iPosAtEnd & "."

\$Increm = Mod(Asc(\$char) - \$A_asc, \$iGroupSize) + \$base ; For each group of 5 (or \$iGroupSize) numbers, we have:  \$Increm = Base + (0 to 4)
\$iFactor = (Int((Asc(\$char) - \$A_asc) / \$iGroupSize)) * \$iGroupJump ; Every nth group of 5 numbers, multiply by 10 (or \$iGroupJump) i.e. (10 * n), where first in group is n = 0.
Return \$iFactor + \$Increm & "."
EndFunc   ;==>_Alpha2Numeric

#cs ; _Alpha2Numeric(Chr(\$i), 11, 5, 10) returns:-
A = 11. B = 12. C = 13. D = 14. E = 15.   <-- a group
F = 21. G = 22. H = 23. I = 24. J = 25.   <-- a group
K = 31. L = 32. M = 33. N = 34. O = 35.   <-- a group
P = 41. Q = 42. R = 43. S = 44. T = 45.   <-- a group
U = 51. V = 52. W = 53. X = 54. Y = 55.   <-- a group
Z = 56.         <-- sequencially carried on from the previous group

_Alpha2Numeric(Chr(\$i), 3, 8, 12) returns:-
A = 3. B = 4. C = 5. D = 6. E = 7. F = 8. G = 9. H = 10.
I = 15. J = 16. K = 17. L = 18. M = 19. N = 20. O = 21. P = 22.
Q = 27. R = 28. S = 29. T = 30. U = 31. V = 32. W = 33. X = 34.
Y = 35. Z = 36.         <-- sequencially carried on from the previous group
#ce```

## Create an account

Register a new account