Variablen aufsplitten!?

  • Guten tag !


    Ich würde gerne folgenden text aufsplitten aber dabei ein paar änderungen vornehmen und sie dann ausgeben lassen.

    zu Bearbeitender text z.b.

    admin:99:*user:1:*user:2:*user:3:*user:4:*user:5:*.............

    **Da hätte ich vorher noch ne frage.... diese variablen wären immer unterschiedlich das heisst z.b. könnten es 20 user sein or einmal nur 5 user or admins.... daher meine frage... **

    und so sollte er dann aussehen z.b.

    admin(99)
    user(1)
    user(2)
    user(3)
    user(4)
    user(5)

    das sollte am besten in eine ListenBox geschrieben werden und für jeden einzelnen user dann z.b. eine variable die ich dann immer für diesen user nehmen kann wenn der z.b. angeklickt wurde das dann für den bestimmten user(variable) ein command ausgeführt werden kann.....

    **wie kann ich so einen text wiedergeben das der dann immer alle so wie der fertige text aussieht egaaL wieviel des sind und das ich dann eine "If" funktion auf den benötigten user starten kann... ich habs shconmal mit Stringsplit versucht aber wenn ich z.b. das versuche:
    $split = Stringsplit($text,"*")
    If StringinStr($text,$split[4],1) Then
    funktion
    Endif

    aber es nur z.b. 3 user sind dann gibt der mir immer nen error aus... ich will aber das der die if funktion dann für jeden gewählten user ausführt... ich weiss ich bin so schlecht im erklären... lol

    wenn ihr mir halt nit helfen könnt versuche ich es irgendwie weiter xD

    bin haLt nen naPPel in probleme erklären....

    hoffe aber ihr könnt mir helfen !!

    MfG reeZZer

    PS. bin auch schon sehr müde xD

    Einmal editiert, zuletzt von reeZZer (4. April 2007 um 02:23)

  • hi..

    Zum ersten kannst du dir anschauen:

    StringSplit ( "string", "delimiters" [, flag ] )


    , da zwischen den usern ja immer ein : ist...

    beim 2en versteh ich die Frage nicht^^

  • so wie schon wunderbar erkannt brauchste stringsplit....
    wenn ich deine frage richtig verstanden hab....
    du hast insgesamt 3 user (egal ob admin oder nicht) und versuchst dann aufs VIERTE element des array zuzugreifen???!!!
    ->wie soll das gehen ohne viertes element???<-

    [autoit]

    #include<Array.au3>
    $text = "admin:99:*user:1:*user:2:"
    $split = Stringsplit($text,"*")
    _ArrayDisplay($split,"hello")

    [/autoit]

    um dein problem "einfach" zu lösen ich würd zunächst den text am * trennen danach jedes element am : und am ende die elemente passend zusammenführen...element1&"("&element2&")"

    ....lösung....

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    $text = "admin:99:*user:1:*user:2:"
    $split = Stringsplit($text,"*")
    _ArrayDisplay($split,"hello")
    $split2 = Stringsplit($split[1],":")
    _ArrayDisplay($split2,"hello")
    $replaced = $split2[1]&"("&$split2[2]&")"
    MsgBox(0,"",$replaced)
    ;mit ein paar schleifen machste dass auch für mehrere user
    ;ansonsten würd ich mal StringRegExpReplace anschauen damit gehts auch...

    [/autoit]
    • Offizieller Beitrag

    Sicher geht das auch noch kürzer mit Regulären Ausdrücken.
    So ist es aber auch ganz praktikabel.

    [autoit]

    $string = "admin:99:*user:1:*user:2:*user:3:*user:4:*user:5:*"
    $arUser = StringSplit($string, "*")
    $OutString = ""
    For $i = 1 To $arUser[0]-1 ; da auch am Ende des Strings ein Trennzeichen ist, folgt noch ein leerer String - deshalb '-1'
    $var = StringTrimRight($arUser[$i], 1) & ")"
    $OutString &= StringReplace($var, ":", "(") & @LF
    Next
    MsgBox(0, '', $OutString)

    [/autoit]
  • wow ... ich danke euch.... das war schonmal sehr sehr gute antworten.... eine frage hätte ich jez noch... sagen wir mal ich nehme das letzte hier vom bugfix(danke dir)......

    Code
    $string = "admin:99:*user:1:*user:2:*user:3:*user:4:*user:5:*"
    $arUser = StringSplit($string, "*")
    $OutString = ""
    For $i = 1 To $arUser[0]-1 ; da auch am Ende des Strings ein Trennzeichen ist, folgt noch ein leerer String - deshalb '-1'
    	$var = StringTrimRight($arUser[$i], 1) & ")"
    	$OutString &= StringReplace($var, ":", "(") & @LF 
    Next
    MsgBox(0, '', $OutString)

    aber ich möchte diese ganze funktion mit den ausgeben nur ausführen wenn ich ein command erhalte mit z.b.

    userlist:12:*user:X:

    also das "12" würde dann die user-anzahl enthalten und "user:X:" wäre dann ein user der dieses command senden würde.... wie kann ich das dann per if command machen also wenn userlist:XX:user:X: Then soll er diese funktion ausgeben aber dabei vl. auch nochn wenns geht die useranzahl rausfiltern und welcher user es gesendet hat !? ich weiss ich lass euch da die ganze arbeit machen... ich bin gemein *g* aber ich hänge grade an dem fest ...

    und sagen wir mal ich möchte für den user 10 (falls es ihm gibt) und für den user 4 eine funktion starten... aber nur falls es ihm gibt....... wie kann ich dann das machen ?


    also ihr müsst wirklich jez nit stunden or so sitzen und testen or so nur falls es euch einfällt...

    ich danke euch schonmal .... und ja genau sowas habe ich gesucht was ihr gepostet habt ;) nettes forum :stolz_bin:


    MfG reeZZer

    • Offizieller Beitrag

    So, nun brauchst du nur noch für die User-Nummern anpassen:

    EDIT
    Ich hab den Code nochmal etwas 'gesäubert'. Einiges war ja nur zur Demo:

    Spoiler anzeigen
    [autoit]

    #include <string.au3>
    Dim $arUser, $string = "admin:99:*user:1:*user:12:*user:3:*user:4:*user:5:*"

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

    $arUser = StringSplit($string, "*")
    If Not IsArray($arUser) Then
    MsgBox(16, "Fehler", "Userlist ist leer")
    Else
    Dim $arUserList[$arUser[0]-1]
    MsgBox(0, '', $arUser[0]-1 & " User sind online")
    For $i = 1 To $arUser[0]-1 ; da auch am Ende des Strings ein Trennzeichen ist, folgt noch ein leerer String
    $var = StringTrimRight($arUser[$i], 1) & ")"
    $arUserList[$i-1] = StringReplace($var, ":", "(")
    Next
    For $i = 0 To UBound($arUserList)-1
    $var = _StringBetween($arUserList[$i], "(", ")")
    Switch $var[0]
    Case 4
    ; code für User 4
    Case 12
    ; code für User 12
    ; etc.
    EndSwitch
    Next
    EndIf

    [/autoit]

    Wenn du die Bezeichnungen (admin, user) gar nicht auswertest, sondern nur die Werte zwischen den ":" kannst du das noch mehr schrumpfen:

    Spoiler anzeigen
    [autoit]

    #include <string.au3>
    Dim $arUser, $string = "admin:99:*user:1:*user:12:*user:3:*user:4:*user:5:*"

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

    $arUser = StringSplit($string, "*")
    If Not IsArray($arUser) Then
    MsgBox(16, "Fehler", "Userlist ist leer")
    Else
    MsgBox(0, '', $arUser[0]-1 & " User sind online")
    For $i = 1 To $arUser[0]-1
    $var = _StringBetween($arUser[$i], ":", ":")
    Switch $var[0]
    Case 4
    ; code für User 4
    Case 12
    ; code für User 12
    ; etc.
    EndSwitch
    Next
    EndIf

    [/autoit]
  • Ich danke dir !!! :)

    nun hab ich alles was ich brauche *michvoreuchundbesondersBugfixverbeug* :klatschen:


    Wünsche euch noch einen schönen Tag !!!


    MfG reeZZer