Natürlich sollte man eine so große Datei nicht in eine Listbox machen. Erstens passen nicht
alle Einträge rein und zweitens dauert es ja auch, die Listbox nach jeder Zeile neu zu zeichnen.
Da nimmt man besser ein Array o.ä. dafür, also etwas ohne Anzeige. Macht ja auch keinen Sinn,
große Mengen an Daten visuell zu sichten. Und wenn, dann halt häppchenweise.
Code: Alles auswählen
Procedure.q CountLines(id.i)
; Merke dir die aktuelle Position
Protected position.q = Loc(id)
Protected lines.q = 0
; Springe an den Anfang der Datei
FileSeek(id, 0)
; Lies solange einzelne Zeilen aus wie möglich und zähle mit
While Not Eof(id)
ReadString(id)
lines + 1
Wend
; Springe wieder zu alten Position zurück
FileSeek(id, position)
; Gib die Anzahl an Zeilen zurück
ProcedureReturn lines
EndProcedure
If OpenWindow(0, 0, 0, 600, 400, "Fenster",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 80, 30, "Starte Lesen")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 0
If ReadFile(0, "F:\BigFile.txt")
Dim zeile.s(CountLines(0))
x.l = 0
While Eof(0) = 0 ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
zeile(x) = ReadString(0, #PB_Ascii) ; Zeile für Zeile einlesen
x = x + 1
Wend
EndIf
CloseFile(0)
MessageRequester("Einträge", Str(x), #PB_MessageRequester_Ok|#PB_MessageRequester_Info)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
EndIf