String aufsplitten

  • Hallo erstmal ....
    ich suche eine Funktion, die Einen String ein verschiedene Teile aufsplittet...
    aber nich nach zeichen sondern nach deranzahl von Buchstaben also wenn ich

    [autoit]


    $Var = "ABCD1234DEFG"
    $Array = (die Funktion)

    [/autoit]


    er soll mir den string in kleine stücke zerhacken zb 4
    also $Array[1] soll ABCD sein $Array[2] soll 1234 sein und $array[3] soll DEFG sein
    wäre nett wenn jemand was wüsste

    Einmal editiert, zuletzt von NoNever (29. April 2009 um 20:49)

  • mmh ... kenne jetzt eigentlich nur stringsplit aber moment ich schreib mal schnell ein befehl :P ich editiere ihn dann rein
    So _StringSplitLetters
    $Count = in wieviel Teile zerteilt werden soll :P

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $Split = _StringSplitLetters("ABCDEFGH",2)
    _ArrayDisplay($Split)
    Func _StringSplitLetters($String,$Count = 2)
    Dim $Array[1]
    $Array[0] = $Count
    $Split = StringSplit($String,"")
    $StringRet = ""
    For $i = 1 to (Ubound($Split,1)-1)/$Count
    $StringRet = $StringRet&$Split[$i]
    Next
    _ArrayAdd($Array,$StringRet)
    $StringRet2 = ""
    For $i = (Ubound($Split,1)-1)/$Count+1 to Ubound($Split,1)-1
    $StringRet2 = $StringRet2&$Split[$i]
    Next
    _ArrayAdd($Array,$StringRet2)
    Return $Array
    EndFunc

    [/autoit]


    mfg nof@ker

    Einmal editiert, zuletzt von nof@ker2 (29. April 2009 um 20:38)

  • Hättest du auch selbst mit den String-Funktionen lösen können,
    aber da ich mal gerade in guter Laune bin... ;)

    [Edit:] Wooohaaaa oO Habe mich täuschen lassen, da passt was nicht ^^

    Hab mir da jetzt nicht so viel Mühe mit gegeben, aber sie funktioniert.
    Kann man bestimmt noch kürzen, ...
    Naja ^^

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

  • jo Danke erstmal werde sie gleich testen
    edit:
    geht nich folgendes kommt raus:
    [0]|abcd
    [1]|bdfh
    [2]|cfil
    [3]|dhlp
    [4]|ejot
    [5]|flrx
    [6]|gnu2
    [7]|hpx6
    [8]|ir10
    [9]|jt4
    das erste stimmt zwar noch aber dannach nicht mehr

  • Jau tut mir Leid, habe mehr darauf geachtet, wie viele
    der Ausgibt.. ^^
    Sorry, ich setz mich nochmal dran..
    *Brille zurechtrück* ;)

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

  • Den String kannst Du wie folgt in 3 Teile à 4 Buchstaben/Zahlen teilen:

    Spoiler anzeigen
    [autoit]


    $1_Var = StringMid("ABCD1234DEFGH", 1, 4)
    MsgBox(0, "Folgende 2 Zeichen werden ab Position 5 extrahiert:", $1_var)
    $2_Var = StringMid("ABCD1234DEFG", 5, 4)
    MsgBox(0, "Folgende 2 Zeichen werden ab Position 5 extrahiert:", $2_Var)
    $3_Var = StringMid("ABCD1234DEFG", 9, 4)
    MsgBox(0, "Folgende 2 Zeichen werden ab Position 5 extrahiert:", $3_var)

    [/autoit]

    Das ganze mit Array und Array auslesen:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Local $avArray[3]

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

    $avArray[0] = StringMid("ABCD1234DEFGH", 1, 4)
    $avArray[1] = StringMid("ABCD1234DEFG", 5, 4)
    $avArray[2] = StringMid("ABCD1234DEFG", 9, 4) ;$3_var

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

    _ArrayDisplay($avArray, "$avArray")

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

    msgBox(0,"Hier mal Array [0]", "Hier mal Array [0] : " & $avArray[0])

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Uhm.. Okay.
    Das scheint wohl die einfachste Methode zu sein, wobei ich persönlich von
    den Regular Expressions keinen Dunst habe ^^

    Zur Vollständigkeit halber, und vor allem zur Wiederherstellung meiner Ehre, meine Funktion,
    gefixed.:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $string = "abcdefghijklmnopqrstuvwxyz1234567890123"
    $r = _split( $string, 4 )
    _ArrayDisplay( $r )

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

    Func _split( $str, $nr )
    Local $nr2 = $nr, $j
    Local $split = StringSplit( $str, '' )
    Local $m = Mod( $split[0], $nr )
    Local $n = ($split[0]-$m)/$nr
    If $m <> 0 Then $n += 1
    Local $ret[$n]
    For $i = 1 To $n
    $ret[$i-1] = ''
    $j = 1
    If $i = $n And $m <> 0 Then $nr2 = $m
    While $j <= $nr2
    $ret[$i-1] &= $split[($i-1)*$nr+$j]
    $j+=1
    WEnd
    Next
    Return $ret
    EndFunc

    [/autoit]

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

  • @At alina ja aber es geht nicht als Array

    Das Array kannst Du doch auslesen und was geht daran nicht? ?(

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • danke für eure Mühen aber ich werde wohl doch lieber mit stringregexp arbeiten hab mal nachgemessen 0.0444613 ms
    speed ist auch wichtig, denn es handelt sich um eine nicht decompilebare verschöüsselung ähnlich wie md5

    Alina
    man muss bei deiner 'Methode ja jedes Array Elemelnt ja einzelnt defieniren wenn amn nen String mit 200 zeichen oder mehr hat wird das kompliziert

  • Kompliziert? okay.
    Geht nicht? Das war nicht richtig. ;)

    Aber freut mich doch, das Du eine Lsg. bekommen hast, denn dafür sind wir ja alle hier.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Alina, Deine Idee an sich ist schon ganz gut, nur musst Du eine Schleife benutzen, um flexibel auf die Stringlänge reagieren zu können:

    [autoit]


    #include <Array.au3>
    $Var = "ABCD1234DEFG5678"
    $Len = StringLen($Var)
    Global $Array[$Len / 4]
    For $i = 0 To $Len / 4 - 1
    $Array[$i] = StringMid($Var, $i * 4 + 1, 4)
    Next
    _ArrayDisplay($Array)

    [/autoit]