```
Sum = 0
Index = 1
FOR i = 1 TO LEN(lcString)
ch = SUBSTR(lcString, i, 1)
IF ISDIGIT(ch)
Sum = Sum + VAL(ch)*(Index*2)
ELSE
IF ISALPHA(ch)
SUM = SUM + (ASC(ch)-55)*(Index*2)
ENDIF
ENDIF
Index = Index + 1
ENDFOR
Return Sum
```

Solved

Posted on 2012-09-10

I found this on a website. It's vb (I think) and it is supposed to take a string consisting of both characters and numbers and return only numbers.

I spent the last hour hacking it up and pretty much destroying it trying to get it to work within vfp9. I'll paste what I've done below the actual code.

Actual code:

me:

What I get are the following compile errors:

I've yet to get past this point to see if the code actually will do anything.

I spent the last hour hacking it up and pretty much destroying it trying to get it to work within vfp9. I'll paste what I've done below the actual code.

Actual code:

```
Dim Sum As Long = 0
Dim Index As Integer = 1
For Each ch As Char In lcString
If Char.Isdigit(ch) Then
Sum += Sum + Integer.Parse(ch) * (Index * 2)
ElseIf Char.IsLetter(ch) Then
Select Case ch.ToString.ToUpper
Case "A"
Sum += Sum + 10 * (Index * 2)
Case "B"
Sum += Sum + 11 * (Index * 2)
Case "C"
Sum += Sum + 12 * (Index * 2)
Case "D"
Sum += Sum + 13 * (Index * 2)
Case "E"
Sum += Sum + 14 * (Index * 2)
Case "F"
Sum += Sum + 15 * (Index * 2)
Case "G"
Sum += Sum + 16 * (Index * 2)
Case "H"
Sum += Sum + 17 * (Index * 2)
Case "I"
Sum += Sum + 18 * (Index * 2)
Case "J"
Sum += Sum + 19 * (Index * 2)
Case "K"
Sum += Sum + 20 * (Index * 2)
Case "L"
Sum += Sum + 21 * (Index * 2)
Case "M"
Sum += Sum + 22 * (Index * 2)
Case "N"
Sum += Sum + 23 * (Index * 2)
Case "O"
Sum += Sum + 24 * (Index * 2)
Case "P"
Sum += Sum + 25 * (Index * 2)
Case "Q"
Sum += Sum + 26 * (Index * 2)
Case "R"
Sum += Sum + 27 * (Index * 2)
Case "S"
Sum += Sum + 28 * (Index * 2)
Case "T"
Sum += Sum + 29 * (Index * 2)
Case "U"
Sum += Sum + 30 * (Index * 2)
Case "V"
Sum += Sum + 31 * (Index * 2)
Case "W"
Sum += Sum + 32 * (Index * 2)
Case "X"
Sum += Sum + 33 * (Index * 2)
Case "Y"
Sum += Sum + 34 * (Index * 2)
Case "Z"
Sum += Sum + 35 * (Index * 2)
End Select
End If
Index += 1
Next
Return Sum
```

me:

```
FUNCTION char_to_num
LPARAMETERS lcString
Dim Sum As Long
Dim Index As Integer
SUM = 0
INDEX = 1
For Each ch As Char In lcString
DO CASE
CASE VARTYPE(ch) = "N"
Sum = Sum + Integer.Parse(ch) * (Index * 2)
CASE VARTYPE(ch) = "C"
ch=UPPER(ch)
ENDCASE
DO CASE
Case ch="A"
Sum = Sum + 10 * (Index * 2)
Case ch="B"
Sum = Sum + 11 * (Index * 2)
Case ch="C"
Sum = Sum + 12 * (Index * 2)
Case ch="D"
Sum = Sum + 13 * (Index * 2)
Case ch="E"
Sum = Sum + 14 * (Index * 2)
Case ch="F"
Sum = Sum + 15 * (Index * 2)
Case ch="G"
Sum = Sum + 16 * (Index * 2)
Case ch="H"
Sum = Sum + 17 * (Index * 2)
Case ch="I"
Sum = Sum + 18 * (Index * 2)
Case ch="J"
Sum = Sum + 19 * (Index * 2)
Case ch="K"
Sum = Sum + 20 * (Index * 2)
Case ch="L"
Sum = Sum + 21 * (Index * 2)
Case ch="M"
Sum = Sum + 22 * (Index * 2)
Case ch="N"
Sum = Sum + 23 * (Index * 2)
Case ch="O"
Sum = Sum + 24 * (Index * 2)
Case ch="P"
Sum = Sum + 25 * (Index * 2)
Case ch="Q"
Sum = Sum + 26 * (Index * 2)
Case ch="R"
Sum = Sum + 27 * (Index * 2)
Case ch="S"
Sum = Sum + 28 * (Index * 2)
Case ch="T"
Sum = Sum + 29 * (Index * 2)
Case ch="U"
Sum = Sum + 30 * (Index * 2)
Case ch="V"
Sum = Sum + 31 * (Index * 2)
Case ch="W"
Sum = Sum + 32 * (Index * 2)
Case ch="X"
Sum = Sum + 33 * (Index * 2)
Case ch="Y"
Sum = Sum + 34 * (Index * 2)
Case ch="Z"
Sum = Sum + 35 * (Index * 2)
ENDCASE
Index = Index + 1
Next
ENDFOR
Return Sum
```

What I get are the following compile errors:

```
Dim Sum As Long
Error in line 42: Unrecognized command verb.
Dim Index As Integer
Error in line 43: Unrecognized command verb.
ENDFOR
Error in line 113: There is a missing keyword in the FOR...ENDFOR or DO CASE...ENDCASE command structure.
```

I've yet to get past this point to see if the code actually will do anything.

4 Comments

```
Sum = 0
Index = 1
FOR i = 1 TO LEN(lcString)
ch = SUBSTR(lcString, i, 1)
IF ISDIGIT(ch)
Sum = Sum + VAL(ch)*(Index*2)
ELSE
IF ISALPHA(ch)
SUM = SUM + (ASC(ch)-55)*(Index*2)
ENDIF
ENDIF
Index = Index + 1
ENDFOR
Return Sum
```

I'm closing this to award you the points.

I do have another question, but I'll post it separately since you did answer my original question. The new post will ask if this can this be reversed to get the original string back.

Your first source of code should be suspicious. Code is never of high quality if lines repat in it. This was a useless arrangement of cases. VB also has the ASC() function.

And if the vfp compiler tells you it doesn't knwo a function or command, well, there is the MSDN reference to search for DIM (via google most probably more successful) and find out it's just like LOCAL a variable definition.

Bye, Olaf.

Title | # Comments | Views | Activity |
---|---|---|---|

foxpro limit number of licenses | 11 | 29 | |

How to manipulate a memo field to extract string contents? | 3 | 79 | |

file (PDF) to base64 string | 2 | 111 | |

VFP9 options in the cloud (and elsewhere) | 3 | 102 |

Join the community of 500,000 technology professionals and ask your questions.

Connect with top rated Experts

**14** Experts available now in Live!