Auswahl eines bestimmten Satzes

  • Hallo Experten,

    ich bastle gerade an einem Script, welches Sonderwünsche wechselt.
    Es soll von 280 auf 270 umgestellt werden, was an sich kein Problem ist mit Autoit.
    Mein Problem ist, dass 280 nicht immer an der gleichen Stelle in der Liste steht, da auch verschiedene andere Felder enthalten sein können.

    Meine Frage ist jetzt, wie schreibe ich das Script, dass Autoit eindeutig weiß, dass es die 280 nehmen soll.

    Vielen Dank für Eure Hilfe

    LG

    Erik

  • Also, ich versteh das so: Ich habe eine lange Liste mit Zahlen, wovon eine 280 ist, und die möchte ich dann auf 270 ändern.
    Ist das so richtig???
    Könntest du bitte ein Beispiel nennen...

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Hallo,

    genau so ist es.
    eine lange liste mit verschiedenen einträgen wo:
    03
    04
    07
    280
    290

    ist, aber bei jedem Datensatz ändert sich die Position von 280. Die Änderung von 280 erfolgt aber durch entfernen von 280 und 270 neu hinzufügen. also weiß ich nicht ob Strinreplace da korrekt ist.

    Wie nutze ich den
    StringReplace() richtig?


    danke lg erik


    edit: Die Änderung von 280 erfolgt aber durch entfernen von 280 und 270 neu hinzufügen. also weiß ich nicht ob Strinreplace da korrekt ist.

  • Musst natürlich das Script entsprechend anpassen. Die Infos bekommst du mit dem AutoIt Window Info Tool.
    Habs zwar jetzt nur ausm Kopf geschrieben, aber ich vertrau mir

    Spoiler anzeigen
    [autoit]

    #Include <GuiListView.au3>
    $hWin = WinGetHandle("Fenstername")
    $hListView = ControlGetHandle($hWin, "", "Class der Listview (Siehe au3info.exe)")
    If @error Then Exit MsgBox(0, "", "Keine Listview gefunden.")

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

    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1
    If _GUICtrlListView_GetItemText($hListView, $i) = "280" Then
    _GUICtrlListView_ClickItem($hListView, $i, "left", False, 1, 0)

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

    ControlClick($hWin, "", "Control ID des löschen Buttons")

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

    Sleep(100)

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

    ControlSetText($hWin, "", "Control ID des Input felds", "270")
    ControlClick($hWin, "", "Control ID des Hinzufügen Buttons")
    EndIf
    Next

    [/autoit]
  • "Control ID des löschen Buttons")

    kann ich hier auch TAB TAB TAB TAB und so einfügen?


    danke erstmal für deine hilfe, ich probier das gleich mal...

    lg

    erik

  • Hallo nochmal,

    also ich habe jetzt alles nach besten Wissen und Gewissen erledigt, doch kmm jetzt Folgender Fehler:
    "Autoit Error
    Line 29 (File "C:\Programme\Autoit3\Include\WinAPIError.au3"):
    Func_WinAPI_GetLastError($curErr=@error, $curExt=@extended)
    Error: "Func" statement has no matching "EndFunc"."

    Ich find den Fehler aber leider nicht =(

    Hier mal der Quellcode:

    Spoiler anzeigen
    [autoit]

    Opt("MustDeclareVars", 1)

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

    Global $ProgName = "Programmname"
    Global $FilePath = "Sonderwunsch 280.txt"
    Global $ArchivPath = "Archiv\Sonderwunsch 280.txt"
    Global $SepChar = ";"

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

    Global $FileHandle
    Global $FileLine

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

    ; Warnmeldung
    MsgBox(64, @ScriptName & ": Sonderwunschänderung", _
    "Outlook muss geschlossen sein.")

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

    ; Auf schon vorhandenen Archivpfad testen
    If FileExists($ArchivPath) = 1 Then ErrorExit($ArchivPath & " existiert bereits.")

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

    ; Programm aktivieren
    WinActivate($ProgName)
    If WinWaitActive($ProgName, "", 1) = 0 Then ErrorExit($ProgName & " ist nicht aktiv.")

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

    ; Datei öffnen
    $FileHandle = FileOpen($FilePath, 0)
    If $FileHandle = -1 Then ErrorExit($FilePath & " konnte nicht geöffnet werden.")

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

    ; Datei zeilenweise einlesen und bearbeiten
    Do
    $FileLine = FileReadLine($FileHandle)
    Select
    Case @Error = 0
    InsertVorlage($FileLine)
    Case @Error = -1 ; fertig
    Case Else
    ErrorExit($FilePath & " konnte nicht korrekt gelesen werden.")
    EndSelect
    Until @Error = -1

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

    ; Datei schließen
    FileClose($FileHandle)

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

    ; Textdatei ins Archiv verschieben
    If FileMove($FilePath, $ArchivPath, 0) = 0 Then
    ErrorExit("Fehler beim Verschieben von " & $FilePath & " auf " & $ArchivPath & ".")
    EndIf

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

    ; Endmeldung
    MsgBox(64, @ScriptName, "Änderung erfolgreich.")

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

    Exit

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

    Func InsertVorlage($Line)

    Local $LineArray
    Local $CRF
    Local $I

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


    $LineArray = StringSplit($Line, $SepChar)
    If $LineArray[0] <> 2 Then
    ErrorExit("Ungültige Eingabezeile in Datei " & $FilePath & ": " & @CrLf & $Line)
    EndIf
    $CRF = StringStripWS($LineArray[1], 3)

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


    WinWait("Programmname","")
    If Not WinActive("Programmname","") Then WinActivate("Programmname","")
    WinWaitActive("Programmname","")

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

    Send("{ALTDOWN}{ALTUP}ma")
    Send($CRF)
    Sleep(500)
    Send("{ENTER}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{SPACE}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{DOWN}")
    #Include <GuiListView.au3>
    $hWin = WinGetHandle("Programmname")
    $hListView = ControlGetHandle($hWin, "", "Class List of Active Window")
    If @error Then Exit MsgBox(0, "", "Keine Listview gefunden.")

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

    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1
    If _GUICtrlListView_GetItemText($hListView, $i) = "280" Then
    _GUICtrlListView_ClickItem($hListView, $i, "left", False, 1, 0)

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

    ControlClick($hWin, "", Send("{TAB}{TAB}{TAB}{ENTER}")

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

    Sleep(500)

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

    ControlSetText($hWin, "", Send("{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}2{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{TAB}")
    ControlClick($hWin, "", Send("{ENTER}")
    EndIf
    Next

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

    EndFunc

    [/autoit]

    Danke für Eure Hilfe, ich schaff das alleine niemals.

    Liebe Grüße

    Erik

  • Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>

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

    Opt("MustDeclareVars", 1)

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

    Global $ProgName = "Programmname"
    Global $FilePath = "Sonderwunsch 280.txt"
    Global $ArchivPath = "Archiv\Sonderwunsch 280.txt"
    Global $SepChar = ";"

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

    Global $FileHandle
    Global $FileLine

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

    ; Warnmeldung
    MsgBox(64, @ScriptName & ": Sonderwunschänderung", _
    "Outlook muss geschlossen sein.")

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

    ; Auf schon vorhandenen Archivpfad testen
    If FileExists($ArchivPath) = 1 Then ErrorExit($ArchivPath & " existiert bereits.")

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

    ; Programm aktivieren
    WinActivate($ProgName)
    If WinWaitActive($ProgName, "", 1) = 0 Then ErrorExit($ProgName & " ist nicht aktiv.")

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

    ; Datei öffnen
    $FileHandle = FileOpen($FilePath, 0)
    If $FileHandle = -1 Then ErrorExit($FilePath & " konnte nicht geöffnet werden.")

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

    ; Datei zeilenweise einlesen und bearbeiten
    Do
    $FileLine = FileReadLine($FileHandle)
    Select
    Case @error = 0
    InsertVorlage($FileLine)
    Case @error = -1 ; fertig
    Case Else
    ErrorExit($FilePath & " konnte nicht korrekt gelesen werden.")
    EndSelect
    Until @error = -1

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

    ; Datei schließen
    FileClose($FileHandle)

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

    ; Textdatei ins Archiv verschieben
    If FileMove($FilePath, $ArchivPath, 0) = 0 Then
    ErrorExit("Fehler beim Verschieben von " & $FilePath & " auf " & $ArchivPath & ".")
    EndIf

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

    ; Endmeldung
    MsgBox(64, @ScriptName, "Änderung erfolgreich.")

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

    Exit

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

    Func InsertVorlage($Line)

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

    Local $LineArray
    Local $CRF
    Local $I

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

    $LineArray = StringSplit($Line, $SepChar)
    If $LineArray[0] <> 2 Then
    ErrorExit("Ungültige Eingabezeile in Datei " & $FilePath & ": " & @CRLF & $Line)
    EndIf
    $CRF = StringStripWS($LineArray[1], 3)

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

    WinWait("Programmname", "")
    If Not WinActive("Programmname", "") Then WinActivate("Programmname", "")
    WinWaitActive("Programmname", "")

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

    Send("{ALTDOWN}{ALTUP}ma")
    Send($CRF)
    Sleep(500)
    Send("{ENTER}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{SPACE}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{TAB}")
    Sleep(500)
    Send("{DOWN}")
    Local $hWin, $hListView, $I
    $hWin = WinGetHandle("Programmname")
    $hListView = ControlGetHandle($hWin, "", "Class List of Active Window")
    If @error Then Exit MsgBox(0, "", "Keine Listview gefunden.")

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

    For $I = 0 To _GUICtrlListView_GetItemCount($hListView) - 1
    If _GUICtrlListView_GetItemText($hListView, $I) = "280" Then
    _GUICtrlListView_ClickItem($hListView, $I, "left", False, 1, 0)

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

    ControlClick($hWin, "", Send("{TAB}{TAB}{TAB}{ENTER}"))

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

    Sleep(500)

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

    ControlSetText($hWin, "", Send("{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}2{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{TAB}"),"")
    ControlClick($hWin, "", Send("{ENTER}"))
    EndIf
    Next

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

    EndFunc ;==>InsertVorlage

    [/autoit]

    Habe jetzt aber keine Logikfehler behoben.

    Zitat

    "Control ID des löschen Buttons")

    kann ich hier auch TAB TAB TAB TAB und so einfügen?

    NEEEEEIN :O

    Niemals!!!

    Die Control-Befehle (ControlClick, ControlSend usw.) sind extra dafür gemacht, dass du kein Send benutzen musst.
    Send ist böse! Versuch so wenig Send wie möglich zu benutzen - das ist sehr unsauber und es kann leicht mal was daneben gehen (was bei wichtigen Daten nicht unbedingt von Vorteil ist)

    Du benötigst lediglich das AutoIt Window Info Tool (AutoIt Verzeichnis).
    Ist dieses gestartet, wählst du das Finder Tool, und ziehst es auf den Button.
    Im Reiter Control, siehst du unter "Advanced Mode" zum Beispiel sowas hier:
    [CLASS:Button; INSTANCE:48]

    einfach doppelklick drauf machen, (Oder abtippen) und in den Control-Befehl einfügen

    [autoit]

    ControlClick("Rechner","","[CLASS:Button; INSTANCE:48]");Drückt die Taste 5 beim Windows-Rechner

    [/autoit]
  • Hallo,

    danke dir erstmal.
    Ich muss mir das jetzt erstmal alles zu gemüte führen^^

    Danke.

    lg

    Erik

  • Hallo,

    ich glaub, viel fehlt nicht mehr =)

    Er bringt aber jetzt in Zeile 139 folgenden Fehler:
    Line 139

    $hWin = WinGetHandle("Programmname bzw. Fenstername") ^ERRR

    Error: Variable used without being declared.

    Einmal editiert, zuletzt von ny_unity (12. April 2010 um 17:18)