String aus Textbox zerlegen und Buchstaben in Zahlen ändern

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    String aus Textbox zerlegen und Buchstaben in Zahlen ändern

    Hallo Alle,

    ich möchte einen 7-stelligen String(z.B. 3ABC1DE) quasi zerlegen und die Buchstaben in vorbestimmte Zahlen umwandeln. Auftauchende Ziffern sollen unverändert bleiben.

    Dazu habe ich den String in ein Char Array eingelesen(variable = Textbox.Text.CharArray) und eine For-Each-Schleife skizziert(For Each zeichen As Char In variable Next zeichen). Kann mir jemand Code-Mässig auf die Sprünge helfen, was ich nun in die Schleife reinschreibe? ?( ?( ?(

    Ich dachte, vielleicht die Zahlen direkt in ein Hilfsarray kopieren und die Buchstaben mit den vorzugebenden Zahlenwerten ersetzen.

    A = 10
    B = 11
    usw.

    nach obigem Beispiel muss dann im Hilfsarray 3 10 11 12 1 13 14 stehen.

    thx for any Ideas
    1. Am besten erstellst du dir eine Klasse, in diese Schreibst du den Alten wert und den wert der Ersetzt werden soll (als Eigenschaft)

    2. In deinem Programm erstellst du eine List Of der Klasse und fügst alle Buchstaben mit den Werten hinzu. So nun läufst du in deiner for each Schleife noch eine Schleife durch die dir das Zeichen sucht und es Austauscht mit dem Zeichen das du ersetzten willst.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Andy16823 schrieb:

    1. Am besten erstellst du dir eine Klasse, in diese Schreibst du den Alten wert und den wert der Ersetzt werden soll (als Eigenschaft)

    2. In deinem Programm erstellst du eine List Of der Klasse und fügst alle Buchstaben mit den Werten hinzu. So nun läufst du in deiner for each Schleife noch eine Schleife durch die dir das Zeichen sucht und es Austauscht mit dem Zeichen das du ersetzten willst.


    Der Sinn deiner Methode erschließt sich mir nicht ganz. Wieso so unnötig kompliziert?
    Versuche es mal so wie ich erklärt habe,

    1) Klasse Anlegen mit den Eigenschaften alt und neu (oder Value, replaceAs)
    2) Eine List of der Klasse erstellen
    3) In deiner For each eine Schleife Durchlaufen und wenn alt = char ist dan ersetzen als mit dem neu wert
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Andy16823 schrieb:

    Klasse Anlegen mit den Eigenschaften alt und neu (oder Value, replaceAs)

    GEnau das macht ein Dictonary(Of TKey, TValue)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Hi
    annähernd O(1), da bei gleichem Hashcode die Überprüfung der Schlüssel-Gleichheit auf Equals basiert wird. Ggf. wäre auch ein Delegat schöner, da du mit diesem die Gruppen schön zuordnen kannst:

    VB.NET-Quellcode

    1. Dim result As String = String.Concat(input.Select(AddressOf ReplaceChar))

    VB.NET-Quellcode

    1. Shared Function ReplaceChar(input As Char) As String
    2. If input >= "0"c AndAlso input <= "9"c Then
    3. Return input.ToString()
    4. ElseIf input >= "A"c AndAlso input <= "Z"c Then
    5. Return (Asc(input) - Asc("A"c) + 36).ToString()
    6. ElseIf input >= "a"c AndAlso input <= "z"c Then
    7. Return (Asc(input) - Asc("a"c) + 10).ToString()
    8. Else
    9. Throw New NotSupportedException()
    10. End If
    11. End Function

    So spart man sich unnötig viele Einträge im Dictionary.

    Gruß
    ~blaze~
    es handelt sich auf jeden Fall um ein Mapping - scheinbar sollen Zeichen auf Zahlen gemappt werden.
    Eine Möglichkeit wäre:

    VB.NET-Quellcode

    1. Dim mappings = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    2. Dim input = "3ABC1DE"
    3. Dim output(input.Length - 1) As Integer
    4. For i = 0 To input.Length - 1
    5. output(i) = mappings.IndexOf(input(i))
    6. Next
    ich weiß aber nicht, ob dieses primitiv-mapping via IndexOf dem wirklichen Problem gerecht wird - dazu ist die Frage zu unspezifisch.