aus txt lesen

  • Hallo zusammen,

    bin neu im forum sowie ein Neuling bei AutoIT.

    Habe nun ein kleines Script zum Laufen gebracht Schwitz...
    Leider habe ich nun meine Grenzen erreicht.

    Ich möchte aus einer Datei *.txt Zeile für Zeile auslesen und mit meinen Script verarbeiten.

    Send(Inhalt Zeile1) .... Send(Inhalt Zeile2) ..... usw.

    Mit _FileReadToArray konnte ich zwar den Inhalt lesen aber nicht in das Send integrieren.

    Irgendwie muß dies mit einer Variablen gehen.

    Vielen Dank.

    Einmal editiert, zuletzt von leertaste (10. Dezember 2007 um 19:53)

    • Offizieller Beitrag

    Hallo!

    Das Beispiel aus der Hilfe zu _FileReadToArray sollte schon ganz gut weiterhelfen, denke ich:

    [autoit]

    #include <file.au3>
    Dim $aRecords
    If Not _FileReadToArray("error.log",$aRecords) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 to $aRecords[0]
    Msgbox(0,'Record:' & $x, $aRecords[$x])
    Next

    [/autoit]

    Es wird ein Array gefüllt, das man dann durchgehen kann.

    Viel Erfolg,
    peethebee

  • Hallo,

    ja, dies habe ich auch probiert, aber irgendwie stehe ich daneben.

    Wenn ich nun Send anfüge ergibt Send ein leeres Send

    AutoIt

    #include <file.au3>
    Dim $aRecords
    If Not _FileReadToArray("error.log",$aRecords) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 to $aRecords[0]
    ;Msgbox(0,'Record:' & $x, $aRecords[$x])
    Next

    Send ($aRecords, 1)

    Das Fenster habe ich unterdrückt.

    Danke

    • Offizieller Beitrag

    Hi,

    hier mal ganz einfach:

    Mußt lediglich den Dateipfad anpassen, dann wirst du sehen, was es macht.

    [autoit]

    #include <file.au3>
    #include <Array.au3>
    Dim $aRecords
    If Not _FileReadToArray("test.txt",$aRecords) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    _ArrayDisplay($aRecords, "Deine Datei")

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

    For $x = 1 to $aRecords[0]
    $return = Msgbox(4,'Eintrag ' & $x & " senden?", $aRecords[$x])
    If $return = 6 Then Send($aRecords[$x])
    Next

    [/autoit]

    So long,

    Mega

  • Hi,

    leider verstehe ich nicht wohin der Inhalt gesendet wird.

    Eigentlich möchte ich mit notepad mehrere Dateien die in einer txt stehen nacheinander öffnen Text hinzufügen, speichern und schließen.

    Das Send (aus der txt) in die Dialogbox Öffnen schaff ich trotz deiner Hilfe nicht.


    Danke.

    • Offizieller Beitrag

    Hi,

    kein Problem. Aber bevor ich jetzt wieder nur die Hälfte von dem mache, was du willst:

    Du hast eine Textdatei name.txt in dieser Datei stehen mehrere andere Pfade zu Textdateien.

    Du möchtest die ganzen Textdateien öffnen in Notepad Text hinzufügen und speichern und schließen.

    Richtig?

    Du mußt die Dateien nicht in Notepad öffnen, um Text anzufügen, das kannst du auch direkt machen.

    Send sendet an das gerade offene Fenster zu dem Control, das den Fokus hat.

    So long,

    Mega

  • Hi,

    du liegst vollkommen richtig.

    Mein Ziel ist es die txt zu öffnen und dann den Text einzufügen und wieder speichern. Das dies nicht der eleganteste Weg ist, kann ich mit vorstellen. Die zu öffnenden Dateien stehen in einer *.txt

    Da ich ja erst kleine Schritte mache wäre mir ein solcher Weg am liebsten.

    Der zweite Schritt wäre dann sicher dein Vorschlag mit einem Control zu arbeiten.

    Danke.

  • Hi,

    dank deiner Hilfe konnte ich einen kleinen Schritt machen.

    [autoit]

    Run("notepad.exe")
    WinActivate("Unbenannt - Editor")
    WinWaitActive("Unbenannt - Editor")

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

    Send("^o") ;Dialogbox Datei-Öffnen

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

    #include <file.au3>
    Dim $aRecords
    If Not _FileReadToArray("C:\Dateiliste.txt",$aRecords) Then ;Pfad+Dateiname ins array
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 to $aRecords[0]
    Send($aRecords[$x], 0) ;Zeile 1 aus Dateiliste in Datei-Öffnen Dialog
    Send("{Enter}") ;Datei öffnet
    Next

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

    ControlSend("", "", 15, "Dies ist ein Beispieltext") ;in geöffneter Datei diesen Text schreiben
    Send("^s") ;Datei speichern

    [/autoit]

    Das Öffnen der Datei aus der Dateiliste.txt (array) klappt.

    Doch leider wird nicht der gewünschte Text in die Datei geschrieben, sondern der Inhalt des arrays - mit Ausnahme der ersten Zeilen, dies ist ja die geöffnete Datei.

    Weiter gelingt es mir nicht das Öffnen der nächsten Datei aus der Liste zu bewerkstelligen.

    Großer Dank.

  • Hi,

    ich habe mich gefreut das eine Datei aus der Liste zu öffnen war.
    Jetzt sagst du: "Send($aRecords[$x], 0) sollte Send("dein Text")" !

    Wie soll ich nun den Pfad+datei aus dem array übergeben?

    Vorerst reicht es mir einen beliebigen Text anzuhängen.
    Dient auch zu Übungszwecken um mit AutoIT besser klar zu kommen.


    Danke.

    • Offizieller Beitrag

    Hi,

    hier mal ein ganz einfaches Bsp:

    [autoit]

    #include <file.au3>

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

    Global $text = @CRLF & "Diesen Text hänge ich an jede Datei!" & @CRLF & "Neue Zeile"

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

    Dim $dateien_A
    If Not _FileReadToArray(@ScriptDir & "\Dateiliste.txt", $dateien_A) Then ;Pfad+Dateiname ins array
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    For $i = 1 To $dateien_A[0]
    _appendText($dateien_A[$i])
    Next

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

    Func _appendText($filepath)
    $file = FileOpen($filepath, 1)
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf
    FileWrite($filepath, $text)
    FileClose($file)
    EndFunc ;==>_appendText

    [/autoit]

    Edit: Zu beachten ist: Dateiliste.txt muss im selben Verzeichnis liegen, wie das Skript und in Dateiliste muss der komplette Pfad angegeben sein, also z.B. : C:\test\hugo.txt

    So long,

    Mega

  • Hi,

    tool - genauso!

    Danke.

    Trotzdem muss ich noch weiter fragen, denn das mit dem Send(Zeile für Zeile aus der dateiliste) lässt mich nicht los.

    Deine Lösung ist total fix und ohne dass man ein oder mehrere offene Fenster beobachten kann.

    Mit Send ist das ganze ja langsamer, da ja der Pfad getippt wird.

    Wie könnte den diese Lösung aussehen. Leider muß ich nerven, denn momentan fällt es mir schwer mich richtig einzuarbeiten.

    Danke.

    • Offizieller Beitrag

    Hi,

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    Opt("WinTitleMatchMode", 2)
    Global $text = "Diesen Text hänge ich an jede Datei!" & @CRLF & "Neue Zeile"

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

    Dim $dateien_A
    If Not _FileReadToArray(@ScriptDir & "\Dateiliste.txt", $dateien_A) Then ;Pfad+Dateiname ins array
    MsgBox(4096, "Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    For $i = 1 To $dateien_A[0]
    Run(@ComSpec & ' /c notepad.exe ' & $dateien_A[$i], '', @SW_HIDE)
    If WinWaitActive("Editor") Then ConsoleWrite("Jo" & @CRLF)
    ControlSetText('', '', 15, ControlGetText('', '', 15) & $text)
    Sleep(3500) ; Warten damit du den neuen Text siehst :)
    Send("^s") ; speichern
    WinClose("Editor") ; schließen
    Next

    [/autoit]

    So long,

    Mega