Bestimmter StringSplit / Hilfe wäre freundlich

  • Hallo leute, ich habe ein problem. Ich möchte in meinem fall was Splitten.
    Aufgabe:

    Ich habe ein externes Programm geschrieben mit visual basic, dort ist ein Großes Textfeld, dort werde ich als beispiel meinen Benutzername Passwort eingeben.(genau so, Benutzername (leerzeichen) Passwort)

    Ich möchte jetzt das Autoit, nur den Benutzernamen rausfiltert, der immer am Zeilenanfang bis zur leerzeichen stelle steht, und dann im Webbrowsergame das Einfügt(das einfügen sollte ich hinbekommen mittels send $blabla. Da ich Mehrere Games acc habe, und ich zB wissen will wielange ich noch warten muss bis ich was im Browser game zB machen kann.

    Ich möchte also den benutzernamen in jeder zeile abspeichern als ein $ und jedes Passwort was nach dem leerzeichen ist.

    Wie kann ich das machen?!

    Mein Code bis jetzt:

    [autoit]

    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.2.12.1 Author: Shinoby
    Script Function:Shinoby´s gamesupporter.
    #ce ----------------------------------------------------------------------------
    ; Script Start - Add your code below here
    AutoItSetOption("MouseCoordMode", 0)WinWaitActive("Shinoby´s gamesupporter","")

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

    KONTROLLBOXEN OB AKTIVIERT ODER DEAKTIVIERT!

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

    $spiel1 = ControlCommand(Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:3]", "IsChecked", "" )
    $spiel2 = ControlCommand("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:4]", "IsChecked", "" )
    $spiel3 = ControlCommand("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:5]", "IsChecked", "" )
    $spiel4 = ControlCommand("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.BUTTON.app.0.378734a; INSTANCE:6]", "IsChecked", "" )

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

    $input = Controlgettext("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]");ENDE RICHBOX

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

    func _Checken()

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

    If $spiel1 = 1 then
    (HIER WILL ICH JETZT DAS DER DEN BENUTZERNAMEN TRENNT , ALS NE $Benutzernamen1 ABSPEICHERT und das Passwort als $Passwort1 und jede Zeile halt mehr wird, sozusagen $benutzername2 dann 3 und so weiterDAMIT ICH DANN HINTERHET IN DEN WEBBROWSER DEN SEND $Benutzernamen1 BEFEHL ERTEILEN KANN.!Endif

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

    Endfunc

    [/autoit]

    4 Mal editiert, zuletzt von Shinoby (31. Juli 2008 um 14:21)

    • Offizieller Beitrag

    Also:

    [autoit]

    $quelle = "Username passwort"
    $teile = StringSplit($quelle, " ")
    if IsArray($teile) Then
    $user = $teile[1]
    MsgBox(0, "User:", $user)
    $pass = $teile[2]
    MsgBox(0, "Passwort:", $pass)
    EndIf

    [/autoit]

    So sieht es im Prinzip aus. Führ das mal alleine aus und versuche es dann für einen Fall umzubauen.
    Falls es mehr als ein Paar in $quelle gibt, musst du erst an @CRLF splitten und dann in einer For-Schleife alle Teile noch mal wie oben gezeigt aufspalten.

    Viel Erfolg,
    peethebee

  • ok ich habe jetzt es geschaft das er es splittet. 2 probleme habe ich jedoch Code bis jetzt:

    [autoit]

    $input = Controlgettext("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]")

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

    $teile = StringSplit($input, @CRLF)
    $teileg = Stringsplit($input, " ")

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

    $user1 = $teileg[1]
    $pass1 = $teileg[2]
    $user2 = $teileg[3]
    $pass2 = $teileg[4]

    [/autoit]

    Ich habe getestet das es funktioniert, jedoch
    Problem 1:
    Mit dem Obigen code, muss in meinem Großen Textfeld :
    Benutzername1(LEERZEICHEN)Passwort1(LEERZEICHEN)
    Benutzername2(LEERZEICHEN)Passwort2(LEERZEICHEN)
    stehen, wenn ich die Leerzeichen nach Passwort1 wegnehme, liest der Passwort1Benutzername2 also als wäre es ein Wort. Wie kann ich das beheben?

    Problem2:

    Ihr seht hier:

    [autoit]

    $user1 = $teileg[1]
    $pass1 = $teileg[2]
    $user2 = $teileg[3]
    $pass2 = $teileg[4]

    [/autoit]

    mein text ist manchmal vielleicht soger 60zeilen lang. also muss ich jetzt 60Zeilen user3 = blabla pass3 = blabla und so weiter machen oder wie kann ich das verkürzen, das er Automatisch das macht, ?


    Zu beachten ist, am ende habe ich sowas da stehen:

    Benutzername1 Passwort1
    Benutzername2 Passwort2
    Benutzername3 Passwort3
    Benutzername4 Passwort4
    Benutzername5 Passwort5
    Benutzername6 Passwort6
    Benutzername7 Passwort7

    und $user1 = $teileg[1] gleich Benutzername1 sein soll, nicht das am ende alles verschoben ist...

    Also brauch ich sozusagen eine Schleife oder ka was, das automatisch 1,3,5,7,9,11 und so weiter Benutzername ist, und passwort = 2,4,6,8,10 ist.

  • Wie ich dir erst schon in der Shoutbox gesagt hatte, schreib einfach alles in ein 2D Array, dann kannst du später alles ganz einfach mit _ArrayDisplay() anzeigen lassen.

    Du musst nur das Array erstellen $ArInfo[Anzahl der Benutzernamen][2] und dann in 2 For Schleifen das Array befüllen. In der ersten Schleife die ungeraden Zahlen (Benutzer) udn in der zweiten Schleife die geraden Zahlen (Passwörter).

  • Mach es so, wie Mignon es erklärt hat.
    1) An CRLF Splitten :) -> Anzahl der benutzer in Array[0]
    2) Dim $ErgebnisArray[$SplitArr[0]+1][2] -> 2D array für alle Beutzer + PW
    3) For $i = 1 To $SplitArr[0] -> Stringsplit Leerzeichen -> Eintragen in $ErgebnisArray
    4) Array Display :D

  • sorry aber ich bin zu dumm dafür .. :( ich probiere die ganze zeit alles mögliche ich verstehe immernoch nicht wie ihr das meint, da ihr die ganze zeit $ namen verwendet womit ich nichts anfangen kann. Könnt ihr mir nicht einfach Die lösung geben, ich weiß jetzt denkt ihr ich hab keine lust selbst nachzudenken, aber ich bin seid 2tagen am googeln und schaffe den ganzen kack einfach nicht....sorry

    und dann ist es auch noch so heiß ... :/


    $input = Controlgettext("Shinoby´s harchi Checker", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]")
    $teile = StringSplit($input, @CRLF)
    $teileg = Stringsplit($input, " ")

    Dim $ErgebnisArray[$SplitArr[0]+1][2]
    For $i = 1 To $SplitArr[0]

    gibt mir error...

  • $irgendwas -> sind Variablen, wozu auch Array gehören. Ich schreib das ganze jetzt mal in PSEUDO-Code ...


    Das wirst du jetzt wohl umsetzen können :)

  • Probier mal das.

    Zuerst wird die user.txt eingelesen und dann wird beim Leerzeichen gesplittet und am Ende wird das Array angezeigt

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <File.au3>

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

    Local $array
    Local $tmp_array[1][2]

    _FileReadToArray(@ScriptDir & "\user.txt", $array)

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

    ReDim $tmp_array[UBound($array) - 1][2]
    $tmp_array[0][0] = $array[0]

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

    For $x = 1 To $array[0]

    $part = StringSplit($array[$x], " ")

    ; Benutzername
    $tmp_array[$x][0] = $part[1]

    ; Passwort
    $tmp_array[$x][1] = $part[2]

    Next

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

    $array = $tmp_array

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

    _ArrayDisplay($array)

    [/autoit]
  • Wahrscheinlich denkt ihr jetzt ich bin Hirngestört, aber ich packs immernoch nicht. Habe jetzt:


    [autoit]

    $input = Controlgettext("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]")
    $teile = StringSplit($input, @CRLF)$teileg = Stringsplit($input, " ")
    Dim $ErgebnisArray[$teileg[0]+1][2]For $i = 1 To $teileg[0]
    Next
    _ArrayDisplay($ErgebnisArray)

    [/autoit]

    Und es funzt immer noch nicht lol....

  • lol sorry, ich rege mich nur auf weil ich es nicht hinbekomme, ich habe niemals eure Freundlichkeit, und Hilfesupport in frage genommen^^

    Error:


    Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $tmp_array[$x][0] = $part[1]
    ^ ERROR

    Einmal editiert, zuletzt von Shinoby (31. Juli 2008 um 23:26)

  • Mmh hab nachgeguckt, und nochmal alles übrprüft.

    Wisst ihr selbst nicht weiter, oder mach ich es euch schwer :D? -.-

    • Offizieller Beitrag

    Wir können das schon schreiben, nur ist es nicht ganz so einfach, es in deinen Code einzupassen, weil man sich einlesen müsste. Daher haben wir Teilcode geliefert, den du halt einbauen müsstest (weil du deinen Code ja kennst). Du kannst also entweder das versuchen oder warten, bis jemand Zeit und Lust hat, es direkt in deinen Code zu schreiben ;).

    peethebee

  • sollte selbsterklärend sei ndenk ich ;)

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    GuiCreate("MyGUI", 330, 362,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

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

    $Edit_1 = GuiCtrlCreateEdit("Edit1", 30, 30, 260, 260)
    $Button_2 = GuiCtrlCreateButton("start", 30, 310, 250, 30)

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

    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button_2
    sort()
    ;;;
    EndSelect
    WEnd

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

    func sort()

    $input = guictrlread($Edit_1)

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

    $string = StringReplace($input,@crlf," ")
    $array = StringSplit($string," ")
    msgbox(0,"a","insgesammt: "&$array[0]/2&" Nutzer") ; als check ^^
    global $nutzer[$array[0]/2+1] ; legt größe der array fest
    global $passwords[$array[0]/2+1] ; legt größe der array fest
    $nutzer[0] = $array[0]/2 ; setzt das element 0 auf die anzahl der einträge
    $passwords[0] = $array[0]/2 ; setzt das element 0 auf die anzahl der einträge

    $b = 0
    for $i = 1 to $array[0] step +2
    $b = $b + 1
    $nutzer[$b] = $array[$i]
    Next

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

    $b = 0
    for $i = 2 to $array[0] step +2
    $b = $b + 1
    $passwords[$b] = $array[$i]
    Next

    _ArrayDisplay($nutzer) ; bsp ausgabe
    _ArrayDisplay($passwords) ; bsp ausgabe

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

    EndFunc

    [/autoit]
  • Liebe dich, funktioniert, jedoch wird der array am ende angezeig, ich will nicht das der mir das am ende zeigt, sondern ich will das der am ende es in einem $ abspeichert, damit ich mittels send $benutzername1 zB es an einer stelle senden kann, genau so wie benutzername2 usw


    habe jetzt;


    [autoit]

    $input = Controlgettext("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]")
    $teile = StringSplit($input, @CRLF)
    $teileg = Stringsplit($input, " ")

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

    global $nutzer[$teileg[0]/2+1]
    global $passwords[$teileg[0]/2+1]

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

    $nutzer[0] = $teileg[0]/2
    passwords[0] = $teileg[0]/2

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

    $b = 0
    for $i = 1 to $teileg[0] step +2
    $b = $b + 1
    $nutzer[$b] = $teileg[$i]
    Next
    $b = 0
    for $i = 2 to $teileg[0] step +2
    $b = $b + 1
    $passwords[$b] = $teileg[$i]
    Next

    [/autoit]


    wie mach ich jetzt das ich am ende, Benutzername1 an ner anderen stelle senden kann

    Einmal editiert, zuletzt von Shinoby (1. August 2008 um 02:58)

  • kannst du doch o0

    ich hab doch sogar daneben geschrieben das es nur fürs bsp asugegeben wird xD

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

    wenn du die nutzer senden möchtest, einfach

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

    for $i = 1 to $nutzer[0]
    send("Benutzer Nr: "&$i&" "&$nutzer[$i]&@crlf)
    next

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

    ;oder zb

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

    for $i = 1 to $passwords[0]
    send("Passwort Nr: "&$i&" "&$passwords[$i]&@crlf)
    next

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

    ;oder direkt:

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

    for $i = 1 to $passwords[0]
    send("Benutzer Nr: "&$i&" "&$nutzer[$i]&@crlf)
    send("Passwort Nr: "&$i&" "&$passwords[$i]&@crlf)
    next

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

    ;oder wenn du jetzt zb nur nutzer 5 mit seinem pw haben willst:

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

    send($Nutzer[5]&" "&$password[5])

    [/autoit]
  • [autoit]


    $input = Controlgettext("Shinoby´s gamesupporter", "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]")
    $teile = StringSplit($input, @CRLF)
    $teileg = Stringsplit($input, " ")
    global $nutzer[$teileg[0]/2+1]
    global $passwords[$teileg[0]/2+1]
    $nutzer[0] = $teileg[0]/2
    $passwords[0] = $teileg[0]/2
    $b = 0 for $i = 1 to $teileg[0] step +2
    $b = $b + 1
    $nutzer[$b] = $teileg[$i]
    Next
       
    $b = 0 for $i = 2 to $teileg[0] step +2
    $b = $b + 1
    $passwords[$b] = $teileg[$i]
    Next

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

    ControlClick("Shinoby´s gamesupporter", "", "[CLASS:Edit; INSTANCE:1]")
    send($Nutzer[2])

    [/autoit]

    Einmal editiert, zuletzt von Shinoby (1. August 2008 um 03:55)