Frage zu OPENFILE

Previous topic - Next topic

WPShadow

Hi,

wird bei Openfile bereits etwas geladen oder wird einfach nur das File zum Laden bereit gestellt?

Ich frage, weil ich versuchen möchte ein größeres File zu erstellen (z.B. 100mb+) und dort mal eine spezifische Zeile suchen möchte --> wie z.B. bei VIM o.ä. Editoren

lg

W.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Heiko

#1
Meiner Meinung nach wird das File geladen.
Es wird ja direkt zum Lesen bzw. Speichern bereitgestellt.
Hab mal vor ner Weile was mit openfile gemacht und dort konnte ich nach openfile direkt auf die datei zugreifen.
Erst openfile und dann mit den READ.... Befehlen liest man dann aus dem channel in welchen die Datei geladen wurde.

WPShadow

ok, gerade bei einem großen File wäre das also tödlich zu benutzen...

Gut zu wissen. Danke dir!  =D
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Heiko

Ja also wird wohl dann Performancemässig nen neuen Tiefstand geben, grins.
Aber muss ja auch für sowas ne Lösung geben.

Wobei 100MB Text schon echt viel ist.

kanonet

Glaube eigentlich nicht, dass die Datei bereits geladen wird, wäre ja Unsinn. Kannst doch einfach mir einer großen Datei probieren, ob es Performanceprobleme gibt, oder nicht.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

WPShadow

Im Grunde würde es ja auch keinen Sinn ergeben.

Ich mache mal ein paar Tests, schreibe mal ein paar Files mit Blödsinn voll und teste, wie sich das Ganze verhält.
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

Ich tendiere zum nicht geladen :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Marmor

ganz genau  Ocean.

Heiko

achso....also wird dann jeweils bei jedem zugriffsbefehl das file geladen?
ist ja auch bissl umständlich oder?

WPShadow

Umständlich auf jeden Fall!

Nein, mein Gedanke dabei war das File zu öffnen und vorerst einmal nur einen Teil daraus zu laden.

Also genau soviel, wie auf eine Seite paßt. Dabei das Programm einfach mitrechnen lassen, wo genau man ist und in der wievielten Zeile man gerade schreibt (oder so)

Momentan experimentiere ich aber noch etwas damit herum. Mal sehen was draus wird!  :D

AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Schranz0r

Nein Heiko,

die Datei wird nie ganz geladen, es werden je nach bedarf "bits und bytes" geladen, je nach Abfragung ( READBYTE, READLONG usw )
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

WPShadow

Ok, das haut so halbwegs hin, obwohl er mir bei READLINE immer wieder einen Fehler zurück gibt:

keine Datei

Werde aus der Meldung nicht ganz schlau, da mit OPENFILE die Datei korrekt geöffnet wird und auch TRUE zurück gibt
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

Quentin

das hängt auch vom Betriebssystem ab. Die Daten werden beim Lesen aber auch gepuffert. Liest man z.B. nur das erste Byte einer Datei, wird "physikalisch" nicht nur dieses eine, sondern gleich z.B. einige KB gelesen, was weitere Lesevorgänge beschleunigt. Also musst du dir auch bei großen Dateien nicht gleich um Speicher Gedanken machen, wenn das File nicht komplett im Speicher halten willst.

gucksdu hier:
http://stackoverflow.com/questions/5130375/how-exactly-does-fopen-fclose-work

WPShadow

Ich dachte daran mir immer Speicherblöcke zu holen, z.B. die ersten 20 Zeilen als Text und rein in einen Array, wenn man ganz unten angekommen ist und manuell "umblättern" auslöst, dann wieder 20 Zeilen.

Als Vorgang war mein Gedanke: Öffnen, bis zur entsprechenden Zeile durcharbeiten, Auslesen und schließen.

Ist zwar nicht sehr effizient, aber grundlegend sollte es funktionieren. Leider kommt mir da der kleine Fehler in den Weg.

Ich lade heute Abend mal den Code hoch...
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est

WPShadow

Da ich noch nicht viel damit gemacht habe mit OPENFILE ist das mal der erste, sehr grobe Ansatz...

Da der Fehler mitten im Testen entstanden ist und ich keine Zeit hatte, das Ganze durch zu korrigieren, lade ich den Code mal so hoch! Grundlegend sollte das Ganze aber ziemlich selbst erklärend sein.

Die Fehlermeldung, die ich bekomme ist folgende:

Code (glbasic) Select

error: 3
"F:\GLBasic\GLBasic\Editor\Editor.gbas"(74) error : Keine Datei


Das hier ist der (noch sehr grobe) Code dazu:

Code (glbasic) Select

// --------------------------------- //
// Project: Editor
// Start: Tuesday, June 11, 2013
// IDE Version: 11.322


// SETCURRENTDIR("Media") // go to media files

GLOBAL loaded, text$[], id

DIM text$[20]

IF DOESFILEEXIST("dummy.txt") = FALSE THEN create_testfile()

main()

FUNCTION create_testfile:
LOCAL tmp, tmp$

OPENFILE(0, "dummy.txt", 0)

FOR tmp = 0 TO 99999
tmp$ = tmp

WRITELINE 0, tmp$ + " dummy dummy dummy"
NEXT

CLOSEFILE 0

ENDFUNCTION


FUNCTION main:
LOCAL tmp

load_data(0)

WHILE TRUE

IF loaded = FALSE THEN load_data(id)

FOR tmp = 0 TO 19
PRINT text$[tmp], 0, 0 + (tmp * 20)
NEXT

IF KEY(208) = 1
loaded = FALSE
INC id, 1
ENDIF

SHOWSCREEN
WEND

ENDFUNCTION

FUNCTION load_data: id
LOCAL ok, tmp, counter, tmp_counter

ok = OPENFILE(1, "dummy.txt", 1)

counter = id + 20

WHILE id < counter

IF tmp_counter >= id THEN READLINE 1, text$[tmp]


INC tmp_counter, 1
WEND


FOR tmp = 0 TO 19

NEXT

CLOSEFILE 1


loaded = TRUE
ENDFUNCTION
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est