Replace Optimieren bzw alternative methoden

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Replace Optimieren bzw alternative methoden

    Guten Tag liebe Com

    Und zwar verwende ich die Replace "Funktion" um mehrere Vorkommnisse
    ersetzen zu können, ist ja alles kein Problem. Jetzt frage ich mich aber ob
    es nicht eventuell eine bessere Methode gibt um mehrere Vorkommnisse
    in einem String bearbeiten zu können, da mir der Code schlichtweg zu
    unsauber aussieht, und ich mir nicht vorstellen kann das dies so gewollt ist.
    Ich würde mich riesig über neuen Input Freuen.

    /Setting.Bind01 ist ein Wert(String) der zuvor von einem User aus einer Textbox resultiert.

    VB.NET-Quellcode

    1. Dim i As Boolean = Regex.IsMatch(Setting.Bind01, "(%HP|%CarDL|%ID|%FPS|%Day|%Week|%Hour|%Minute|%Second|%City|%Money|%Zone|%Medic|%ReNumber|%Kmh|%VLock|%VEngine)", RegexOptions.IgnoreCase)
    2. If i Then
    3. Dim OutString As String = Bind01.Replace("%HP", shadowAPI2.Player.GetHealth.ToString).Replace("%CarDL", shadowAPI2.Vehicle.GetHealth.ToString).Replace("%ID", shadowAPI2.Player.GetId.ToString) _
    4. .Replace("%Day", DayZone).Replace("%Week", Weekday).Replace("%Hour", DateTime.Now.ToString("HH")).Replace("%Minute", DateTime.Now.ToString("mm")).Replace("%Second", DateTime.Now.ToString("ss")) _
    5. .Replace("%City", shadowAPI2.Player.GetCity).Replace("%Money", CStr(shadowAPI2.Player.GetMoney)).Replace("%Zone", shadowAPI2.Player.GetZone).Replace("%Medic", Setting.Name_Medic) _
    6. .Replace("%ReNumber", Setting.Lastnumber).Replace("%FPS", shadowAPI2.Game.GetFPS.ToString).Replace("%Kmh", shadowAPI2.Vehicle.GetSpeed.ToString).Replace("%VLock", shadowAPI2.Vehicle.IsLocked.ToString) _
    7. .Replace("%VEngine", shadowAPI2.Vehicle.IsEngineEnabled.ToString)
    8. shadowAPI2.Chat.Send(OutString)
    9. Else
    10. shadowAPI2.Chat.Send(Bind01)
    11. End If

    Steven schrieb:

    dass dies so gewollt ist
    Pack jedes Replace in eine neue Codezeile, dann kannst Du das ganze sogar debuggen.
    Gibt es ein Setting.Bind01 und außerdem ein Bind01?
    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!
    Du könntest die Ersetzungen zunächst in ein Dictionary o.ä. speichern und dann per Schleife die Ersetzungen durchführen, ggf. als Funktion auslagern. Aber besser wird das nicht wirklich.

    Ich würde es in etwa so machen:

    Visual Basic-Quellcode

    1. Dim buffer As StringBuilder = Bind01
    2. buffer _
    3. .Replace("%HP", shadowAPI2.Player.GetHealth.ToString) _
    4. .Replace("%CarDL", shadowAPI2.Vehicle.GetHealth.ToString) _
    5. .Replace("%ID", shadowAPI2.Player.GetId.ToString) _
    6. .Replace("%Day", DayZone) _
    7. .Replace("%Week", Weekday) _
    8. .Replace("%Hour", DateTime.Now.ToString("HH")) _
    9. .Replace("%Minute", DateTime.Now.ToString("mm")) _
    10. .Replace("%Second", DateTime.Now.ToString("ss")) _
    11. .Replace("%City", shadowAPI2.Player.GetCity) _
    12. .Replace("%Money", CStr(shadowAPI2.Player.GetMoney)) _
    13. .Replace("%Zone", shadowAPI2.Player.GetZone) _
    14. .Replace("%Medic", Setting.Name_Medic) _
    15. .Replace("%ReNumber", Setting.Lastnumber) _
    16. .Replace("%FPS", shadowAPI2.Game.GetFPS.ToString) _
    17. .Replace("%Kmh", shadowAPI2.Vehicle.GetSpeed.ToString) _
    18. .Replace("%VLock", shadowAPI2.Vehicle.IsLocked.ToString) _
    19. .Replace("%VEngine", shadowAPI2.Vehicle.IsEngineEnabled.ToString)
    20. shadowAPI2.Chat.Send(buffer.Tostring)


    Vom Sinn her nicht wirklich optimiert, aber wesentlich lesbarer (und dank SB performanter, sofern der Compiler es nicht schon optimiert hat). Den RegEx würde ich mir hier komplett schenken (ggf. stattdessen eine Abfrage mit Bind01.IndexOf("%"c) einbauen).
    Wenn du schon Regex einsetzst, dann kannste es auch für den Replace verwenden.

    Ich würde aber 2-stufig vorgehen: Also statt des RiesenRegex, der jeden Match gleich richtig einsortiert würde ich einen Regex suchen, der ganz allgemein Schlüsselworte anhand der vorgefundenen Syntax identifiziert.
    Scheinbar haben die Schlüsselworte ja den Prefix %.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()