txt daten auslesen

  • Hallo an alle


    Ich habe da mal ein kleines problem.
    Ich wollte gerne eine txt Datei auslesen und zwar immer die letzte zeile und nur die spalte 42 bis 54.
    und das in einem abstand von 60 Sekunden

    Ich währe über eure Hilfe sehr dankbar

    LG an alle

    Einmal editiert, zuletzt von systemtrader01 (2. Oktober 2009 um 22:39)

  • Spalten ?(

    Meinst du so :?:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    $datei = "C:\test.txt"

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

    AdlibEnable("_auslesen", 60000) ;alle 60 Sekunden aufrufen

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

    Func _auslesen()
    $file = FileOpen($datei, 0)

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

    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

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

    $zeilen = _FileCountLines($file) - 1 ;Anzahl Zeilen
    $letzte_zeile = FileReadLine($file, $zeilen) ;auslesen
    $letzte_zeile = StringLeft($letzte_zeile, 54) ;rechts wegtrimmen
    $letzte_zeile = StringTrimLeft($letzte_zeile, 41) ;links wegtrimmen
    ConsoleWrite($letzte_zeile & @CRLF)

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

    FileClose($file)
    EndFunc ;==>_auslesen

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

    While 1
    Sleep(10)
    WEnd

    [/autoit]
  • Hallo systemtrader,

    bitte sehr:

    Spoiler anzeigen
    [autoit]


    $file = FileOpen("test.txt", 1)

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

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    $line = ""
    For $i = 1 To 80
    $line = $line & Chr(Random(65, 88, 1))
    Next
    FileWriteLine($file, $line)
    FileWriteLine($file, "Ich bin die letzte Zeile Ich bin die letzte Zeile Ich bin die letzte Zeile Ich bin die letzte Zeile Ich bin die letzte Zeile Ich bin die letzte Zeile")

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

    FileClose($file)
    ;====================== hier beginnt das eigentliche Skript ============================================
    ;Abbruch mit ESCape
    ReadLastLine() ;damit sofort beim Programmstart die letzte Zeile gelesen wird
    HotKeySet(("{Esc}"), "Terminate")
    AdlibEnable("ReadLastLine", 60000)

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

    while 1
    Sleep(250)
    WEnd

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

    Func ReadLastLine()
    $file = FileOpen("test.txt", 0)

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

    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    $line = FileReadLine($file, -1)
    $l4254 = StringMid($line, 42, 13)
    MsgBox(0, "Line read:", $l4254)

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

    FileClose($file)
    EndFunc ;==>ReadLastLine

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

    Func Terminate()
    AdlibDisable() ;Adlib zurücksetzen
    Exit
    EndFunc ;==>Terminate

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

    schau dir die entsrechenden Befehle dazu in der Hilfe an und viel Spaß damit ;)

    Edit: hatte doch tatsächlich die Wiederholung alle 60 sec vegessen
    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (2. Oktober 2009 um 21:07)

  • Hallo nochmal an alle

    Ich Bedanke mich für eure bisherrigen Lösungen und Ideen,
    ein echt freundliches Forum bin wirklich Positiv begeistert :thumbup:
    Aber ich glaube ich muss mein Problem ein wenig genauer
    beschreiben, wir haben 2 teile der Software schon anhand der
    Reference selber gelöst bekommen.

    Nur eben das eine Nicht, eigentlich wie oben beschrieben.

    Also Ich möchte eigentlich immer alle 60 Sekunden in der letzten Zeile 2 Bereiche auslesen,
    zum einen die Zeit und zum anderen den Namen "Ankauf" bzw " "Verkauf" in der txt Datei.
    Um dan eine exe zu starten ( die exe starten haben wir schon gelöst )
    Beim Nächsten auslesen nach 60 Sekunden soll die letzte Zeile eine andere Uhrzeit gosser oder kleiner
    haben, bevor widerum die exe gestartet würd.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    LG

  • Nur zu :)
    Dieses Forum ist wirklich Klasse.
    Für jede Frage, kannst du die Boardsuche benutzten und wenn die nicht hilf einen Thread machen :)
    Hilfe..
    Schnell und kompetent!

    • Offizieller Beitrag

    Da gibt es eine einfachere Lösung (statt $text halt "FileRead(deine_Datei)")

    [autoit]

    #include <array.au3>
    $text = _
    '10/02/2009 02:00:00 2 ankauf 12 1 ' & @CRLF & _
    '13/02/2009 08:00:00 2 verkauf 13 0 0' & @CRLF & @CRLF & _
    '14/02/2009 05:00:00 5 ankauf 14 1 ' & @CRLF & _
    '14/02/2009 10:00:00 5 verkauf 12 0 0' & @CRLF & @CRLF & _
    '16/02/2009 06:00:00 6 ankauf 12 1 ' & @CRLF & _
    '18/02/2009 12:00:00 6 verkauf 13 0 0' & @CRLF & @CRLF & _
    '19/02/2009 07:00:00 7 ankauf 12 1 ' & @CRLF & _
    '19/02/2009 08:00:00 8 verkauf 14 0 0'

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

    $pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
    $ret = StringRegExp($text, $pattern, 3)
    ;~ _ArrayDisplay($ret)

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

    MsgBox(0, 'Letzte Zeile', $ret[UBound($ret)-2] & ' ' & $ret[UBound($ret)-1])

    [/autoit]

    Falls die Leerbereiche evtl. Tabs enthalten, müßte das Pattern im RegEx angepaßt werden.

  • Hallo BugFix

    Und allen anderen Helfern :thumbup:

    Ich danke euch ganz doll für die sehr Freundliche Hilfe von euch
    wirklich schönes Forum.

    LG ST