Hoffentlich könnt Ihr mir weiterhelfen!? (sollte ein Leichtes für Euch sein!)

  • Hallo miteinander!

    Ich bin noch nicht lange dabei, meine Freizeit mit AutoIt zu verbringen - aber ich bin begeistert!!! Toll was man alles machen kann (oder in meinem Fall später einmal machen könnte ;) ).

    Da ich neu in diesem Thema bin, würde ich mich freuen, wenn Ihr mir helfen könntet. ich versuche die Problematik so gut es mir möglich ist zu beschreiben...


    ALSO...

    ich würde mir wünschen :huh: , dass aus einer Datei (Notepad) die so aussehen könnte (um es einfach zu halten):

    A B C D oder B C D A

    für jeden Buchstaben einen Mausklick (auf für die einzelnen Buchstaben definierten koordinaten) zu erhalten.

    das mit den Mouseklicks auf bestimmten Koordinaten ist kein Problem. Mein Problem besteht darin, dass ich keine Lösung gefunden habe, wie der Text Buchstabe für Buchstabe ausgelesen werden kann.

    Also die Reihenfolge der Klicks auf bestimmte Positionen soll genau der Reihenfolge der Buchstaben entsprechen (also übertragen werden)
    Vielleicht kann man ja auch gleich die verarbeiteten "Buchstaben" löschen?? :love:
    Ich hoffe dass ich mich klar genug ausgedrücken konnte.

    Ich habe versucht die benötigten Informationen aus der RIESIGEN Hilfedatei zu bekommen, aber leider sehe ich im Moment de Wald vor lauter Bäumen nicht... :(

    Es wäre toll, wenn Ihr mir weiterhelfen könntet, denn Google, Hilfedatei und Forum waren für diesen skriptteil eher verwirrend für mich ?(

    Vielen Dank!

    Euer Günter

    Einmal editiert, zuletzt von Günter (27. November 2008 um 14:43)

  • Zitat

    Mein Problem besteht darin, dass ich keine Lösung gefunden habe, wie der Text Buchstabe für Buchstabe ausgelesen werden kann.


    Schau mal in der Hilfedatei folgende Themen an:
    FileRead: Das dortige Beispiel zeigt wie du einzelne Zeichen aus einer (Text-)Datei auslesen kannst.
    _FileReadToArray: Das Beispiel dort wandelt eine Datei in ein Array um - was du vielleicht zu deiner weiteren Auswertung verwenden kannst.

    • Offizieller Beitrag

    Wie vorab beschrieben, die Datei mit _FileReadToArray einlesen.
    Dann in einer Schleife die einzelnen Zeilen aufsplitten in Einzelzeichen (StringSplit angucken). Solltest du Leerzeichen im String haben entferne die vorher (StringStripWS).
    Oder viel besser:
    Speichere die Koordinaten in einer INI-Datei. Die Sektion kannst du mit einem Rutsch in ein Array (INIReadSection) einlesen und hast dann bereits die Koordinaten einzeln zur Verfügung.

  • Wow, das ging ja schnell mit den Antworten :) Danke erstmal!

    wenn ich das jetzt hinbekommen habe, die Zeichen richtig einzulesen, wie kann ich die Klickbefehle

    MouseClick ( "left", 1122, 623 ) für A

    MouseClick ( "left", 1153, 718 ) für B

    dann den Zeichen zuordnen (nur dass ich schonmal ne kleine Übersicht habe)?

    Vielen dank für Eure Hilfe!

    Euer Günter

    • Offizieller Beitrag
    [autoit]

    ; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
    $arCoord[2][3] = [ _
    ['A',1122,623], _
    ['B',1153,718]] ; usw.

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

    ; $varBuchstabe enthält den Buchstaben mit dem du vergleichen willst
    For $i = 0 To UBound($arCoord) -1
    If $varBuchstabe = $arCoord[$i][0] Then MouseClick('left', $arCoord[$i][1], $arCoord[$i][2])
    Next

    [/autoit]


    Wäre mal ganz nett, wenn du sagst, was das werden soll.

  • Ich würde die Datei in ein Array einlesen und dann in einer Schleife (Abbruchbedingung -> Ende des Arrays) jedes Zeichen mit switch/case überprüfen ob es nun ein A/B/C/D ist und den entsprechenden Mausklick auslösen

    so in der Richtung

    Switch $welcherBuchstabeBinIch
    Case "A"
    Mouseclick(Koordinaten)
    Case "B"
    Mouseklick(woandershin)
    EndSwitch

  • Zitat

    Wäre mal ganz nett, wenn du sagst, was das werden soll.

    Ich muss für die Uni Daten (in ein Programm meines Profs) eingeben, welches diese Daten über ein keypad in eine Datenbank einliest. Da es sonst ewig dauern würde, habe ich im www dieses Forum gefunden und gehofft, dass ich über AutoIt die Möglichkeit hätte, mir diesen Vorgang zu erleichtern. ;)


  • Wenn 3 oder 4 Buchstaben/Koordinaten hinterlegt sind, mag das OK sein. Aber bei z.B. 15 od. 20 ist das Array die bessere Alternative.

    Naja eigentlich wollte ich bloß nicht dein mehrdimensionales Array nutzen. ;)
    Brauch da immer so lange bis ich da durchgestiegen bin. ?(

    Vom Schreibaufwand her sind die Lösung auch vergleichbar. Bei mir ist letzten Endes bloß Copy&Paste und die 3 Werte anpassen. (Und es ist auch für Leute zu verstehen die mit Arrays auf dem Kriegsfuß stehen :thumbup: )


    Ich muss für die Uni Daten (in ein Programm meines Profs) eingeben, welches diese Daten über ein keypad in eine Datenbank einliest. Da es sonst ewig dauern würde, habe ich im www dieses Forum gefunden und gehofft, dass ich über AutoIt die Möglichkeit hätte, mir diesen Vorgang zu erleichtern. ;)

    Hat das Keypad Buttons ? Wenn ja wären ControlDs wahrscheinlich besser (also ControlClick).

    Einmal editiert, zuletzt von mehrsolala (24. November 2008 um 16:38)

  • BugFix, Deinen Vorschlag habe ich jetzt versucht in die Tat umzusetzen.


    [autoit]


    #include <Array.au3>
    ; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
    Dim $arCoord[2][3] = [ _
    ['A',1122,623], _ ;H
    ['B',1153,718]] ;okay
    ;erfolgsüberprüfung
    ;_ArrayDisplay( $arCoord, "Array created with _ArrayCreate" )
    #include <Array.au3>
    Dim $varBuchstabe
    $varBuchstabe = _ArrayCreate("A", "B" )
    ;erfolgsüberprüfung
    ;_ArrayDisplay( $varBuchstabe, "Array created with _ArrayCreate" )

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

    $file = FileOpen("111.txt", 0) ;öffnet die Datei
    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    EndIf

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

    While 1 ;

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

    $varBuchstabe = FileRead($file, 1) ;
    If @error = -1 Then ExitLoop

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

    For $i = 0 To UBound ($arCoord) -1
    if $varBuchstabe = $arCoord[$i][0] Then MouseClick("left", $arCoord[$i][1], $arCoord[$i][2])
    Next
    WEnd
    Exit

    [/autoit]

    soweit funktioniert der Abschnitt.... jedenfalls bekomme ich keine Fehlermeldungen mehr! :)

    Kann ich irgendwo angeben, wie oft die Schleife durchgeführt werden soll, da ich nach ein paar Wiederholungen Enter drücken muss, um meine Eingaben zu bestätigen (und dann erst die Schleife wieder aufnehmen kann)? Ich weiß, dass das mit dem While/WEnd zu tun hat, habe auch unter Schleifen in der Hilfedatei gelesen und versucht diese einzubauen, hatte aber dabei keinen Erfolg Wahrscheinlich habe ich das mit dem Verschachteln der Schleifen noch nicht verstanden... ?(
    Wäe toll, wenn Ihr mir beim "Basteln" helfen würdet!

    Danke nochmals für Deine/Eure Hilfe!

    5 Mal editiert, zuletzt von Günter (25. November 2008 um 09:22)

  • Wie sieht denn die einzulesende Datei genau aus ?
    Wenn du FileReadToArray ohne Nachbearbeitung der eingelesenen Daten nutzen willst darf nur ein Wert pro Zeile stehen also

    Zitat

    A
    B
    B
    A


    Dann kannst du

    [autoit]

    #include <Array.au3>
    #include <file.au3>

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

    ;filereadtoarray
    Dim $aRecords
    If _FileReadToArray ("111.txt", $aRecords) Then
    EndIf
    _ArrayDisplay( $aRecords, "Daten")

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

    ; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
    Dim $arCoord[2][3] = [ _
    ['A',1122,623], _
    ['B',1153,718]] ; usw.
    _ArrayDisplay( $arCoord, "Koordinaten" )

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

    #cs Für die Fraktion ohne Keypad
    Dim $hingeklickt[20][2]
    #ce

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

    For $t = 1 To UBound($aRecords) -1
    $varBuchstabe = $aRecords[$t]
    For $i = 0 To UBound($arCoord) -1
    If $varBuchstabe = $arCoord[$i][0] Then MouseClick("left", $arCoord[$i][1], $arCoord[$i][2])

    #cs Für die Fraktion ohne Keypad
    If $varBuchstabe = $arCoord[$i][0] Then
    $hingeklickt[$i][0] = $arCoord[$i][1]
    $hingeklickt[$i][1] = $arCoord[$i][2]
    EndIf
    #ce

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

    Next
    Next

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

    #cs Für die Fraktion ohne Keypad
    _ArrayDisplay( $hingeklickt, "Klickor" )
    #ce

    [/autoit]


    benutzen
    Wenn nicht musst du halt FileRead statt _FileReadToArray nehmen und die Werte in ner Schleife ins Array schreiben

  • Guten Morgen mehrsolala!

    Die Datei, die ich letzte Woche bekommen habe sieht ungef. so aus

    Zitat


    AB AB BA

    BA BA BA

    BA BA BA AB AB AB

    meine Testdatei so:

    AB BA AB BA


    dh. in verschiedenen Zeilen, mit immer der gleichen Folge 6/6/12 (Zeichen)

    Nach jeder Zeile muss ich mit Okay bestätigen, also mal nach 6 oder 12 zeichen.

    Wenn ich die Datei so belassen könnte, wäre das toll. BugFix hatte aber was mit Leerzeichen etc entfernen geschrieben...

    Einmal editiert, zuletzt von Günter (25. November 2008 um 10:03)

  • Guten Morgen mehrsolala!

    Die Datei, die ich letzte Woche bekommen habe sieht ungef. so aus


    dh. in verschiedenen Zeilen, mit immer der gleichen Folge 6/6/12 (Zeichen)

    Nach jeder Zeile muss ich mit Okay bestätigen, also mal nach 4 oder 6 zeichen.

    Wenn ich die Datei so belassen könnte, wäre das toll. BugFix hatte aber was mit Leerzeichen etc entfernen geschrieben...

    hm das ja mal ne Sch....-Formatierung :thumbdown:
    mit

    [autoit]


    $text = StringReplace("BA BA BA AB AB AB", " ", "")

    [/autoit]


    bekommst du die Leerzeichen raus das würde ich zeilenweise machen und mit

    [autoit]

    StringSplit("BABABAABABAB", "")

    [/autoit]

    fummelst du die einzelnen Zeichen wieder auseinander (gibt ein array zurück)

    EDIT:
    Ich hab da mal was vorbereitet ;)

    [autoit]

    #include <Array.au3>
    #include <file.au3>

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

    ;filereadtoarray
    Dim $aRecords
    If _FileReadToArray ("111.txt", $aRecords) Then
    EndIf
    _ArrayDisplay( $aRecords, "Daten")

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

    ; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
    Dim $arCoord[2][3] = [ _
    ['A',1122,623], _
    ['B',1153,718]] ; usw.
    _ArrayDisplay( $arCoord, "Koordinaten" )

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

    #cs Für die Fraktion ohne Keypad
    Dim $hingeklickt[20][2]
    #ce

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

    For $z = 1 To UBound($aRecords) -1
    $zeile = StringReplace($aRecords[$z], " ", "")
    $arzeile = StringSplit($zeile, "")
    For $t = 1 To UBound($arzeile) -1
    $varBuchstabe = $arzeile[$t]
    For $i = 0 To UBound($arCoord) -1
    If $varBuchstabe = $arCoord[$i][0] Then MouseClick("left", $arCoord[$i][1], $arCoord[$i][2])

    #cs Für die Fraktion ohne Keypad
    If $varBuchstabe = $arCoord[$i][0] Then
    $hingeklickt[$t][0] = $arCoord[$i][1]
    $hingeklickt[$t][1] = $arCoord[$i][2]
    EndIf
    #ce

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

    Next
    Next

    ;#############HIER OKAY-KLICK EINFÜGEN##########

    Next

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

    #cs Für die Fraktion ohne Keypad
    _ArrayDisplay( $hingeklickt, "Klickor" )
    #ce

    [/autoit]

    Einmal editiert, zuletzt von mehrsolala (25. November 2008 um 10:20)

  • wow! Danke für Deine Hilfe!

    vielleicht sehe ich es ja nur nicht, aber hast Du bei dem Skript bedacht, mal nach 6 und mal nach 12 Zeichen "Okay" zu klicken?

    So wie ich es verstehe, macht doch Deine Formatierung dies "kaputt", oder???

  • wow! Danke für Deine Hilfe!

    vielleicht sehe ich es ja nur nicht, aber hast Du bei dem Skript bedacht, mal nach 6 und mal nach 12 Zeichen "Okay" zu klicken?

    So wie ich es verstehe, macht doch Deine Formatierung dies "kaputt", oder???

    Jep Zeile 39 da einfach Mouseclick auf okay einfügen

  • You made my day! :thumbup: Vielen Dank!!

    ich trau mich schon gar nicht mehr, noch was zu schreiben aber nach der Folge brauche ich noch einen Klick (also einen zweiten in einen anderen Bereich)bevor die neue 6/6/12 Folge anfängt *schau beschämt zu Boden*

  • Bevor er mit den Schleifen anfängt (z.B. in Zeile 20) fügst du

    [autoit]

    $timer = 0

    [/autoit]

    ein

    und nach ;#############HIER OKAY-KLICK EINFÜGEN########## fügst du das ein

    [autoit]


    $timer = $timer + 1
    if $timer = 3 Then
    MsgBox(64, '6/6/12 abgearbeitet', 'Günter klick einmal')
    $timer = 0
    EndIf

    [/autoit]

    damit das allerdings richtig funktioniert musst du vorher die Leerzeilen aus deiner Datei raushauen oder halt nach dem Einlesen die leeren Felder aus $aRecords

    Einmal editiert, zuletzt von mehrsolala (25. November 2008 um 11:22)

  • Du kannst zaubern!!! 8o ich glaube was der Uri Gellar für Pro7, das bist Du für AutoIt... :thumbup: :thumbup: :thumbup: (gewusst wie)

    Vielen vielen Dank für Deine Hilfe!

    Das mit den Leerzeilen/Leerzeichen habe ich gemerkt...

    :cursing: beim Einlesen der ersten Datei hat sich gezeigt, dass leider nicht immer 6/6/12 rauskommt, sondern manchmal auch nur 6/6 was zur Folge hat, dass die Dateb durcheinander kommen da der Datenstrang nicht vollständig ist. hat jemand ne idee?
    (in diesem Fall müsste ich sonst "clear" drücken und nicht die daten der nächsten Zeile einfügen)

    entweder ich muss versuchen die Datei vorher zu filtern, oder eine andere Lösung finden

    [autoit]

    #include <Array.au3>
    #include <file.au3>
    ;filereadtoarray
    Dim $aRecords
    If _FileReadToArray ("111.txt", $aRecords) Then
    EndIf
    _ArrayDisplay( $aRecords, "Daten")

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

    ; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
    Dim $arCoord[2][3] = [ _
    ['A',1122,623], _
    ['B',1153,718]] ; usw.
    _ArrayDisplay( $arCoord, "Koordinaten" )
    #cs Für die Fraktion ohne Keypad
    Dim $hingeklickt[20][2]
    #ce
    $timer = 0
    For $z = 1 To UBound($aRecords) -1
    $zeile = StringReplace($aRecords[$z], " ", "")
    $arzeile = StringSplit($zeile, "")
    For $t = 1 To UBound($arzeile) -1
    $varBuchstabe = $arzeile[$t]
    For $i = 0 To UBound($arCoord) -1
    If $varBuchstabe = $arCoord[$i][0] Then MouseClick("left", $arCoord[$i][1], $arCoord[$i][2])

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

    #cs Für die Fraktion ohne Keypad
    If $varBuchstabe = $arCoord[$i][0] Then
    $hingeklickt[$t][0] = $arCoord[$i][1]
    $hingeklickt[$t][1] = $arCoord[$i][2]
    EndIf
    #ce
    Next
    Next

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

    ;#############HIER OKAY-KLICK EINFÜGEN##########
    MouseClick ("left", 1111,111)
    $timer = $timer + 1
    if $timer = 3 Then
    MouseClick ("left",1511,222) ;MsgBox(64, '6/6/12 abgearbeitet', 'Günter klick einmal')
    $timer = 0
    EndIf
    Next

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

    #cs Für die Fraktion ohne Keypad
    _ArrayDisplay( $hingeklickt, "Klickor" )
    #ce

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

    Habe ich eigentlich schon mal gesagt, dass ich Hiwi-Arbeiten hasse?? :cursing: nein? Ich hasse sie! Sind irgendwie immer Deppenjobs...

    5 Mal editiert, zuletzt von Günter (25. November 2008 um 18:21)