String Split

  • Hallo,

    ich erhalte bei StringSplit
    immer zusätzliche Angaben.
    Ich habe 3 Sätze die mit . getrennt werden.
    Wieso kommt eine leere Msgbox?

    [autoit]


    #include<Array.au3>

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

    $Text = ("Das ist Text 1. Das ist Text2. Das ist Text 3.")

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

    $arraytxt = StringSplit($Text, '.',2)

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

    For $i = 0 To UBound($arraytxt)-1
    Msgbox(0,"Texte",$arraytxt[$i],2)

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

    next
    Exit

    [/autoit]

    Ich weiß, wenn ich den letzen . weglasse geht es.
    Aber bei größeren Texten hat der letzte Satz einen Punkt.
    Und der ist dann falsch!

    :( Grüße Ilse

    Einmal editiert, zuletzt von Ilse (9. Juli 2012 um 12:36)

  • Ja, ich weiß!

    Das Problem:
    Ich habe z.B. in der Zwischenablage einen großen Text.
    Jeder SATZ wird mit . beendet!
    Damit ich nun alle SÄTZE auslesen kann, müsste ich beim letzen einen Punkt löschen.

    Gibt es da keine elegantere Lösung?


    :( Ilse

  • Kannst ja zum Ende des strings gehen und das letzte Zeichen wenn "." löschen

  • Wenn du wirklich am Ende des Textes ein Punkt stehen hast, kannst du ihn einfach löschen:

    [autoit]


    #include<Array.au3>

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

    $Text = ("Das ist Text 1. Das ist Text2. Das ist Text 3.")
    If StringRight($Text, 1) = "." Then $Text = StringMid($Text, 1, StringLen($Text) - 1)
    $arraytxt = StringSplit($Text, '.',2)
    _ArrayDisplay($arraytxt)
    Exit

    [/autoit]

    Ansonsten wird es ein bisschen komplizierter.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Versuch es mal damit.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $Text = ("Das ist Text 1. Das ist Text2. Das ist Text 3.")

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

    _ArrayDisplay (StringSplit ($Text, '.'))
    _ArrayDisplay (_StringSplit ($Text, '.'))

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

    Func _StringSplit ($s_String, $s_Delimiters, $i_Flag = 0)
    If (Not IsInt ($i_Flag)) Or ($i_Flag > 2) Or ($i_Flag < 0) Then
    Local $a_Ret[2] = [1, $s_String]
    Return SetError (1, 0, $a_Ret)
    EndIf

    Local $a_Split = StringSplit ($s_String, $s_Delimiters, $i_Flag)
    Local $a_Ret[1]

    For $i = 1 To $a_Split[0]
    If $a_Split[$i] <> "" Then
    ReDim $a_Ret[UBound ($a_Ret) + 1]
    $a_Ret[UBound ($a_Ret) - 1] = $a_Split[$i]
    EndIf
    Next

    $a_Ret[0] = UBound ($a_Ret) - 1
    Return $a_Ret
    EndFunc ;==> _StringSplit

    [/autoit]

    Leere Strings werden einfach gekickt...

  • Hallo $Var,

    wollte gerade dein Script probieren,
    geht leider nicht! ERROR

    Zitat

    ERROR: _ArrayDisplay() called with expression on Const ByRef-param(s).