Wie die letzten Zeilen einer Textdatei in einen String lesen

Anfängerfragen zum Programmieren mit PureBasic.
Alexherber
Beiträge: 5
Registriert: 06.01.2011 20:06
Computerausstattung: Purebasic 4.51 64 bit
Windows 7 64bit Prof. (programmieren mit PB)
Windows XP (programmieren mit PB)
Debian Lenny
CPU:Intel C2D E6600, MB: ASROCK 4core FullHD 1333,RAM: 6GB Geil
DDR2 800, HD(OS) OCZ Agility 2 E SATA II 2.5 SSD 60GB

Wie die letzten Zeilen einer Textdatei in einen String lesen

Beitrag 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
!!ROOKIE!! Win7 64 PB 4.51
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Alexherber
Beiträge: 5
Registriert: 06.01.2011 20:06
Computerausstattung: Purebasic 4.51 64 bit
Windows 7 64bit Prof. (programmieren mit PB)
Windows XP (programmieren mit PB)
Debian Lenny
CPU:Intel C2D E6600, MB: ASROCK 4core FullHD 1333,RAM: 6GB Geil
DDR2 800, HD(OS) OCZ Agility 2 E SATA II 2.5 SSD 60GB

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

Beitrag von Alexherber »

Vielen Dank, genau das was ich gesucht habe, jetzt fange ich an zu verstehen wie ich da vorgehen muss.
!!ROOKIE!! Win7 64 PB 4.51
Antworten