Seite 3 von 3

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 11:23
von H.Brill
Ich habe jetzt keine Probleme damit. Habe mir extra eine Datei mit 730000 Zeilen gemacht.
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

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 12:13
von Kiffi

Code: Alles auswählen

                Dim zeile.s(Lof(0))
Damit dimensionierst Du zeile.s nicht auf die Anzahl der Zeilen, sondern auf die Größe der Datei.

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 13:18
von H.Brill
Aja, stimmt natürlich.

Gibt ja eine Procedur von NicTheQuick. Ist oben verbessert.

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 14:55
von NicTheQuick
H.Brill hat geschrieben: 14.05.2024 13:18 Aja, stimmt natürlich.

Gibt ja eine Procedur von NicTheQuick. Ist oben verbessert.
Was meinst du damit? Welche Procedure gibt es von mir? Ich habe hier nichts darüber gepostet wie man feststellt wie viele Zeile eine Datei hat.

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 14:58
von Kiffi
NicTheQuick hat geschrieben: 14.05.2024 14:55Welche Procedure gibt es von mir?
Diese :wink:

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 15:36
von NicTheQuick
Uh, das ist aber schon ein Weilchen her. :D

Re: Statt pointer eine Stringvariable nutzen

Verfasst: 14.05.2024 23:58
von mk-soft
LinkedList ...