Stringleft Problem

  • Hi,
    ich habe mal wieder ein Problem :(

    Ich möchte, einen String splitten. Wenn ich jetzt z.B. den Sting hier habe

    [autoit]

    $msgsplit[0] = 'ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'

    [/autoit]

    Den möchte ich jetzt immer an Stelle 53 splitten und dann wieder an Stelle 53 splitten ... und das ganze dan in einem Array speichern.

    Also soll das Array nachher so aussehehn:

    [autoit]

    $msgsplit[0] = 'ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'
    $msgsplit[1] = 'dddddddddddddddddddddddddddddddddddddddddddddddddddd'
    $msgsplit[2] = 'dddddddddddddddddddddddddddddddddddddddddddddddddddd'
    $msgsplit[3] = 'ddddddddddddddddddddddddddd'

    [/autoit]

    Mit Stringleft funktionier das leider nicht:

    Zitat

    If count exceeds string length, the entire string is returned.

    Mein Code wäre gewesen:

    [autoit]

    #include <Array.au3>

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

    Global $msgsplit[501], $i

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

    $msgsplit[0] = "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"

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

    for $i = 1 to 500
    $msgsplit[$i] = StringLeft($msgsplit[$i -1], 53)

    If Stringlen($msgsplit[$i]) < 53 then ExitLoop

    Next

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

    _ArrayDisplay($msgsplit)

    [/autoit]

    Leider funktioniert das halt so nicht, weil immer der komplette String ausgegeben wird und dann die Stringlänge nie kleiner wird als 53.
    Wahrscheinlich stelle ich mich auch nur nochmal ein bisschen dumm an. 8|

    Danke

    Einmal editiert, zuletzt von anno2008 (28. Juli 2008 um 14:21)

  • Wenn du immer den gleichen String splitten willst solltest du ihn auch angeben und nicht immer die neu geschriebene Array Zelle.

    Das ganze gibt für mich allerdings eh kein Sinn.
    Verändert sich den der String ständig damit er wieder über 53 Stellen erreicht?
    Vieleicht kannst du dein Problem ja noch mal genauer umschreiben.

  • [autoit]

    for $i = 1 to 500
    $msgsplit[$i] = StringLeft($msgsplit[$i -1], 53)

    If Stringlen($msgsplit[$i]) < 53 then ExitLoop

    Next

    [/autoit]

    Also, wenn ich diese Schleife richtig deute....
    Dann passiert ja folgendes:
    $msgsplit[0] = seeehr lang.
    $msgsplit[1] = 53 Zeichen lang, die ersten vom $msgsplit[0]

    Aber:
    $msgsplit[2] = StringLeft($msgsplit[1], 53) -- Da $msgsplit[1] genau 53 Zeichen hat, werden doch genau die auch
    in $msgsplit[2] übernommen.
    Und das gleiche dann auch bei $msgsplit[3] , 4, 5, usw.


    Wenn ich dich aber richtig verstanden habe willst du $msgsplit[0] aufspalten in stücke von je 53 Zeichen.

    Das wäre dann ungefähr so..

    [autoit]


    #include <Array.au3>
    $ausgangsstring = 'hallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallo'

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

    $d = Ceiling( StringLen( $ausgangsstring ) / 53 )

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

    Dim $msgsplit[$d+1]
    $msgsplit[0] = $ausgangsstring

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

    For $i = 1 To $d
    $msgsplit[$i] = StringLeft( $ausgangsstring, 53 )
    $ausgangsstring = StringTrimLeft( $ausgangsstring, 53 )
    Next

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

    _ArrayDisplay( $msgsplit )

    [/autoit]

    mfg limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

  • Hi,
    stimmt, mein Code gibt überhaupt keinen Sinn, ich weis auch nicht was ich da gemcht habe...

    Ich will halt irgendeinen X belibiegen String aufteilen immer an den Stellen 53, ich Probiere mich mal, vielleicht bekomm ichs ja noch selber hin.

    limette, genauso, jetzt hab ichs auch selber hingegrigt, hab erst zu spät aktualisiert, aber danke an alle :thumbup:

    Einmal editiert, zuletzt von anno2008 (28. Juli 2008 um 14:20)