Text umwandeln

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Text umwandeln

    Hallo, folgendes :

    Ich habe eine Textbox und darunter eine weitere Textbox nun gebe ich oben einen text ein sagen wir : "Test"

    Nun solte unten für jeden Buchstaben ein vorgeschriebener code ausgegeben werden sagen wir so :

    Für T [[1]] für e [[8]] für s [[7]] usw...

    Wie kann ich das bewergstelligen ? Mit Textbox1.text = ... then ? oder wie
    Leg dir ein Dictionary<char, string> an, da packst du dann alle Möglichkeiten rein, also als Key den Ursprungsbuchstaben und als Value den zu ersetzenden Wert. Dann gehst du das Char-Array des Textes durch und guckst anhand des Dictionarys mit welcher Zeichenkombination der Buchstabe ersetzt werden muss. Zum Dictionary solltest du was bei MSDN finden. Und die string.Replace-Funktion kennst du sicher.
    Splitte nach jedem einzelnen Zeichen in der TextBox, um jedes zu erhalten. Dann schreibst du dir eine Funktion, die das angegebene Zeichen replaced. Also mit der Methode .Replace. Schließlich gibst du den Text wieder aus. Oder du machst das mit nem Dictionary(Of Char, String) und gehst das durch. Ist dann schön typisiert.

    Edit:// Hä, es kam garkein Hinweis, dass einer vor mir gepostet hat. ?(
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    String.Replace ist erheblicher Overhead, weil da für jedes Zeichen der ganze Text umgerührt werden muss.

    Wandle den String in ein Char-Array um, tausche - anhand des Dictionary(Char, Char) die Chars einen nach dem anneren aus, und erzeuge anschließend einen neuen String aus dem Char-array - da gibts ja einen geeigneten Konstruktor für.

    Also gugge v.a. die String-Klasse im ObjectBrowser an, und dann noch Dictionary(Of TKey, TValue), dann hast du alle nötige Info beisammen.
    Ist sicher nicht die beste Lösung und C#, so funktionierts aber einigermaßen sogar in nem Einzeiler:

    C-Quellcode

    1. public string AdvancedReplace(string input, Dictionary<char, string> dict)
    2. {
    3. return string.Concat(input.Select((c) => dict.SingleOrDefault((kvp) => kvp.Key == c).Value ?? c.ToString()));
    4. }

    Der Aufruf sollte klar sein.

    //EDIT:
    Hab grad noch nen Weg gefunden, dasselbe in VB zu erreichen. Verwendet zwar andere Methoden (der ??-Operator ist in VB nicht verfügbar soweit ich weiß), funktioniert aber genauso gut:

    VB.NET-Quellcode

    1. Public Function AdvancedReplace(input As String, dict As Dictionary(Of Char, String)) As String
    2. Return String.Concat(input.Select(Function(c) If(dict.ContainsKey(c), dict.Item(c), c.ToString)))
    3. End Function

    Hoffe, das hilft :).
    Also nach dem rumtesten bin ich nun an dem punkt angelangt wo es nicht geht :D bei mir kam nur wirres zeug so nun hab ich mal das ganze in c++ angeschaut bzw php wie es text generatoren gibt die sind etwas einfacher aufgebaut vll werde ich es von php über vb machen und eine abfrage einbaun das wäre glaub ich einfacher

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim word As String = "aTbcdgfset" '[[0]] = erster Buchstabe (in diesem Fall a) [[1]] = zweiter Buchstabe (in diesem Fall T) usw.
    4. For chars = 0 To word.Count - 1
    5. exChange.Add(word(chars), String.Format("[[{0}]]", chars))
    6. Next
    7. End Sub
    8. Private exChange As New Dictionary(Of Char, String)
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. Dim input As String = String.Concat(TextBox1.Text.Select(Function(item) If(exChange.ContainsKey(item), exChange(item), item.ToString())))
    11. Textbox2.Text = input
    12. End Sub
    13. End Class


    bei Test würde jetzt [[1]][[8]][[7]][[9]] rauskommen.