Mid() und Substring()

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Mid() und Substring()

    Hallo,

    früher habe ich, um eine Zeichenfolge zu überprüfen oder zu setzen die Mid()-Funktion verwendet. Nun habe ich all diese durch Substring() ersetzt. Jetz habe ich ein neues Problem. Wenn beispielsweise abgefragt wird, ob die Zeichenfolge "Lokomotive" am Anfang eines Strings vorhanden ist, gab die Mid-Funktion immer einen Wert zurück, auch wenn der zu überprüfende String kürzer war, als das Suchwort. Die Substring-Funktion gibt einen Fehler zurück, wenn der zu durchsuchende String kürzer als der Suchstring ist.

    VB.NET-Quellcode

    1. Dim Text1 as string = "Auto"
    2. If Mid(Text1,1,10) = "Lokomotive" then
    3. 'Ergebnis = Ja
    4. else
    5. 'Ergebnis = Nein
    6. End If
    7. If Text1.Substring(0, 10) = "Lokomotive" then
    8. 'Fehlermeldung
    9. Else
    10. 'Fehlermeldung
    11. End If

    Die Fehlermeldung lautet:
    System.ArgumentOutOfRangeException: "Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.
    Parametername: length"

    Natürlich könnte ich jetzt umständlich vor der Abfrage die Länge des Strings überprüfen und dann ggf. die Abfrage starten. Allerdings besteht mein String aus einer nicht festgelegten Anzahl von Variablen, die durch Kommata getrennt sind. Die Abfrage mit IndexOf() funktioniert auch nicht, da es auch vorkommen kann, dass eine der Variablen Text enthält. Und wenn dort zufälligerweise mein Suchtext steht, würde die Abfrage ein falsches Ergebnis zurückgeben.

    Hat Jemand eine Idee?

    tron25 schrieb:

    am Anfang eines Strings vorhanden
    testest Du mit .StartsWith(...):
    docs.microsoft.com/de-de/dotne…g.startswith?view=net-6.0
    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!
    Vielen Dank. Es funktioniert.

    Eine Frage hätte ich dann noch:
    Wie kann ich folgenden Code mit .StartWith() schreiben?

    VB.NET-Quellcode

    1. if Ucase(Text1, 0, 10) = "LOKOMOTIVE" then
    2. '...
    3. End If


    Vielleicht

    VB.NET-Quellcode

    1. If Ucase(Text1.StartWith("LOKOMOTIVE") THEN
    2. '...
    3. End If


    Mein Programm lädt seine Einstellungen aus einer .ini-Datei, die auch im Editor geöfnet und bearbeitet werden kann. Ich möchte damit Groß- und Kleinschreibungsunterschiede abfangen.
    Du kannst dir mal diesen Thread anschauen: Böses aus VB6/VB2003 – und die richtigen VB.NET-Alternativen
    Damit findest du die ganzen .Net Alternativen zu den alten Funktionen.

    In deinem Fall einfach Text1.ToUpper().StartsWith("LOKOMOTIVE")
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Das mit der Fehlermeldung bei Substring hat mich auch immer wieder genervt. Deshalb hab ich mir ne Extension SaveSubstring geschrieben, die in solchen Fällen wie MID arbeitet. Wenn man zuviele Zeichen "will", werden einem trotzdem nur soviele zurückgegeben, wie vorhanden sind. Ohne Exception.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Darum verwende ich bei Arrays gerne Take und Skip.

    Take ist da sehr flexibel und auch wenn die dazugelegte Zahlen zu gross ist, gibt es genau zurück, was maximal als Arraylänge vorhanden ist.
    Ob es jetzt bei Strings auch funkst, weiss ich nicht, aber es gibt ja noch die Char-Array.

    Freundliche Grüsse

    exc-jdbi