Teilstring bis bzw. ab einem bestimmten Zeichen

  • Hallo,
    habe da ein vermutlich recht einfaches Problem:
    Ich möchte eine Zeichenkette an einem bestimmten Zeichen teilen. Also einmal brauche ich alle Zeichen bis zum Trennzeichen und dann alle Zeichen ab dem Trennzeichen. Gibt es da eine fertige Funktion?

    Quelle: „Text erster Teil*der zweite Teil“
    Trennzeichen: *
    Ergebnis:

    • „Text erster Teil“
    • „der zweite Teil“


    Gruß Ingo

  • Hi,

    Deine Strings könntest Du über Array Funktionen abfragen.
    Wenn Dein Trennzeichen immer * ist und * nicht im String selbst vorkommt:

    [autoit]

    ;Stringlösung
    $string = "Text erster Teil*der zweite Teil"
    Msgbox (0,"Strings", StringMid ($string, 1, StringInStr ($string, "*") - 1) & @CRLF & StringMid ($string, StringInStr ($string, "*") + 1))

    [/autoit][autoit][/autoit][autoit]

    ;Arraylösung
    $var = StringSplit ($string, "*")
    For $i = 1 To UBound ($var) - 1
    Assign ("string" & $i, $var [$i])
    Next

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound ($var) - 1
    MsgBox (0,"String " & $i,Eval ("string" & $i))
    Next

    [/autoit]

    ;-))
    Stefan

  • Ich möchte eine Zeichenkette an einem bestimmten Zeichen teilen. Also einmal brauche ich alle Zeichen bis zum Trennzeichen und dann alle Zeichen ab dem Trennzeichen

    Wie sonst stellst du dir denn die Rückgabe vor? Wenn du einen String teilen möchtest, müssen die Ergebnisse ja irgendwo gespeichert werden. Du hast dann im Array

    [0] = Die Anzahl der Strings, in die zerlegt wurde.
    [1] = Den ersten Teilstring bis zu besagtem Trennzeichen
    [2] = Den zweiten Teilstring bis zum Trennzeichen
    [3] = Den dritten Teilstring bis zum Trennzeichen
    usw...

    Einfacher gehts doch nicht oder?

    Zitat

    Ich brauche aber nur den reinen String


    Wie meinst du das? Du willst einen String zerlegen, möchtest ihn dann aber wieder zusammenführen? Du müsstest dir ja dann auch (durch ein Trennzeichen) anzeigen lassen, wo der Ursprüngliche String geteilt wurde. Damit wären wir dann wieder bei der Ausgangssituation, nur dass du statt * ein anderes Trennzeichen zB | benutzt.

    Hier mal ein einfaches beispiel zu StringSplit

    [autoit]

    #include <Array.au3>
    $sString = "Ich bin ein String. Ich möchte bei jedem Punkt geteilt werden. Hier is dann Schluss"

    [/autoit][autoit][/autoit][autoit]

    $aArray = StringSplit($sString,".")
    _ArrayDisplay($aArray)

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 to $aArray[0]
    MsgBox(0,"$aArray"&$i,$aArray[$i])
    Next

    [/autoit]

    Wenn du allerdings nur das * "loswerden" möchtest, dann benutz doch einfach StringReplace() und lösch die * so

  • Hallo,
    ich brauche immer nur den ersten oder den zweiten Teil des Strings.
    Am besten würde eine Funktion passen die mir nur den ersten Teilstring zurück gibt und eine zweite Funktion die mir nur den zweiten Teilstring gibt.

    Also so eigentlich:

    [autoit]

    $Text = "Text erster Teil*der zweite Teil"

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, "erster Teil", StringSplitTeilstring ($Text, "*", 1))
    MsgBox(0, "zweiter Teil", StringSplitTeilstring ($Text, "*", 2))

    [/autoit][autoit][/autoit][autoit]

    Func StringSplitTeilstring ($sString, $sDelimiters, $iNummer)
    Local $aTEMP

    [/autoit][autoit][/autoit][autoit]

    $aTEMP = StringSplit ($sString, $sDelimiters, 0)
    Return($aTEMP[$iNummer])
    EndFunc

    [/autoit]

    Hatte nur gehofft es gibt etwas Besseres. ;)

    Gruß Ingo

  • /*EDIT*/ gelöscht, weil Vorschau nicht genutzt.....