Codeproblem

  • VB.NET

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

    Tag zusammen! Ich habe ein kleines Problem mit einem Code für vb 2010:

    Ich möchte einen variierenden Text per Copy&Paste einfügen und ihn per Klick auf einen Button umwandeln.
    Das funktioniert mit der replace-Funktion wunderbar, offenbart aber ein Problem! :D

    Der Text hat das folgende Format:

    [1-3 stellige Nummer][Absatz (Lf)][Text unbekannter Wortanzahl und unbekannter Zeichenlänge][Absatz (Lf)]

    Das Ganze wiederholt sich eine unbekannte Anzahl X lang (Etwa 20-50 mal).


    Umgewandelt werden soll das Ganze in:
    [1-3 stellige Nummer][Leerzeichen][Text unbekannter Wortanzahl und unbekannter Zeichenlänge][Absatz (Lf)]

    Im Ansatz funktioniert es gut mit folgendem Code:

    Quellcode

    1. Dim eingabe As String
    2. Dim anzeige As String
    3. eingabe = txtEingabe.Text
    4. anzeige = eingabe.Replace(vbLf, " ")
    5. lblAnzeige2.Text = anzeige


    Und jetzt zum Problem:
    Mein Code ersetzt jedes vbLf! Das führt dazu dass ich folgende Ausgabe habe:
    [1-3 stellige Nummer][Leerzeichen][Text unbekannter Wortanzahl und unbekannter Zeichenlänge][Leerzeichen]

    Kurzum: Wie schaffe ich es - möglichst einfach - dass nur jedes zweite "Zeichen"vorkommen (vbLf) ersetzt wird?

    Geht das auch mit einem einfachen Befehl? Für komplizierte Codebeispiele bin ich noch etwas zu unerfahren in Visual Basic! :D
    Willkommen im Forum. :thumbup:
    Such mit RegEx nach Nummer UND Lf und ersetz das durch Nummer UND Leerzeichen.
    Benutze die Suchfunktion RegEx auf der Startseite.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Kurzum: Wie schaffe ich es - möglichst einfach - dass nur jedes zweite "Zeichen"vorkommen (vbLf) ersetzt wird?


    Zum Beispiel, indem du dich mit den Grundlagen der Stringbearbeitung vertraut machst. (Nicht nur Split oder Replace).


    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. Dim i As Integer, x As Boolean
    4. Dim t As String
    5. t = "122" & vbLf & "smasasm" & vbLf & "456" & vbLf & "hsfldkmv kdvkd s" & vbLf & "888" & vbLf & "awjkhsl"
    6. i = 0
    7. x = True
    8. While t.IndexOf(vbLf, i) > 0
    9. i = t.IndexOf(vbLf, i)
    10. If x Then
    11. t = t.Substring(0, i) & " " & t.Substring(i + 1)
    12. End If
    13. x = Not x
    14. i += 1
    15. End While
    16. Debug.Print(t)
    17. End Sub
    18. End Module
    Wie wäre es mit:

    VB.NET-Quellcode

    1. 'Text erzeugen
    2. Dim text1 As String = "122" & vbLf & "smasasm" & vbLf & "456" & vbLf & "hsfldkmv kdvkd s" & vbLf & "888" & vbLf & "awjkhsl"
    3. 'OriginalText
    4. MsgBox(text1)
    5. 'Regex definieren
    6. Dim reg As New System.Text.RegularExpressions.Regex("[0-9]+" & vbLf, System.Text.RegularExpressions.RegexOptions.Multiline)
    7. Dim splitchar As Char = Convert.ToChar(vbLf)
    8. Dim replacestring As String = " "
    9. 'Alle vorkommen suchen
    10. For Each s As System.Text.RegularExpressions.Match In reg.Matches(text1)
    11. 'Bei jeden Fund ersetzen
    12. text1 = text1.Replace(s.Value, s.Value.Split(splitchar)(0) & replacestring)
    13. Next
    14. 'neuen Text ausgeben
    15. MsgBox(text1)
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    RodFromGermany schrieb:

    Willkommen im Forum. :thumbup:
    Such mit RegEx nach Nummer UND Lf und ersetz das durch Nummer UND Leerzeichen.
    Benutze die Suchfunktion RegEx auf der Startseite.
    Gute Idee, ich habe mich auch schon ein wenig mit RegEx beschäftigt!
    Aber wie soll das gehen, wenn ich die Nummer nicht kenne da sie immer unterschiedlich ist...
    Nach einer mehrstelligen Nummer + vbLf kann ich im String suchen, kein Problem!
    Aber wie behalte ich beim Ersetzen die Nummer bei, die ich beim Schreiben des Codes noch gar nicht kenne? ;)

    Edit: Problem gelöst, danke! :)

    Meine Lösung ist nun:

    Quellcode

    1. Dim s2 As String = Regex.Replace(s1, "([0-9]+)\n", "$1 ")


    Danke für den Tipp mit RegEx! Mit Hilfe der runden Klammern wird nun ein Ausdruck bestimmt, der mit $1 als "Ausdruck 1" erhalten bleibt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Suchender“ ()