Seite 1 von 1

Wie die letzten Zeilen einer Textdatei in einen String lesen

Verfasst: 06.01.2011 21:14
von Alexherber
Hallo, ich habe bereits die Suchfunktion benutzt, habe leider keinen passenden (für mich verständlichen!) Beitrag gefunden.
Ich bin Programmieranfänger und habe leider keine Vor/Grundkenntnisse etc.

Mein Problem ist folgendes, ich möchte eine variierende Log-Textdatei einlesen
und die letzten (ungefähr) 20 Zeilen in einen string speichern den ich dann ausgeben kann.
Die Grösse sowie der Inhalt der Datei ändert sich laufend.

Wie gehe ich da nun vor?
Wenn ich die Datei mit ReadFile() einlese, wie kann ich die letzten 20 String-Zeilen hier "herauslösen"?
Oder muss ich da mit einem Stringfield arbeiten?

mfg, Alex

Re: Wie die letzten Zeilen einer Textdatei in einen String l

Verfasst: 06.01.2011 21:26
von ts-soft
Da gibt es viele Möglichkeiten, hier ein Beispiel:

Code: Alles auswählen

EnableExplicit

NewList Last20.s()

Define FF = ReadFile(#PB_Any, #PB_Compiler_Home + "SDK\Readme.txt")

If FF
  While Not Eof(FF)
    AddElement(Last20())
    Last20() = ReadString(FF)
  Wend
  CloseFile(FF)
EndIf

Define Count = ListSize(Last20())
Define index = 1
SelectElement(Last20(), count - 21)
While NextElement(Last20())
  Debug Str(index) + " " + Last20()
  index + 1
Wend
Oder mit Stringfield aus dem Speicher (evtl. schneller)

Code: Alles auswählen

EnableExplicit

Define FF = ReadFile(#PB_Any, #PB_Compiler_Home + "SDK\Readme.txt")

If FF
  Define Size = Lof(FF)
  Define *mem = AllocateMemory(Size)
  If *mem
    ReadData(FF, *mem, Size)
  EndIf
  CloseFile(FF)
EndIf

Define.s Text = PeekS(*mem)
FreeMemory(*mem)
RemoveString(Text, #CR$)
Define Count = CountString(Text, #LF$) + 1

Define i
If Count > 20
  For i = Count  - 20 To Count
    Debug StringField(Text, i, #LF$)
  Next
Else
  For I = 1 To Count
    Debug StringField(Text, i, #LF$)
  Next
EndIf

Re: Wie die letzten Zeilen einer Textdatei in einen String l

Verfasst: 06.01.2011 22:26
von Alexherber
Vielen Dank, genau das was ich gesucht habe, jetzt fange ich an zu verstehen wie ich da vorgehen muss.