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.
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.
ok, gerade bei einem großen File wäre das also tödlich zu benutzen...
Gut zu wissen. Danke dir! =D
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.
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.
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.
Ich tendiere zum nicht geladen :)
ganz genau Ocean.
achso....also wird dann jeweils bei jedem zugriffsbefehl das file geladen?
ist ja auch bissl umständlich oder?
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
Nein Heiko,
die Datei wird nie ganz geladen, es werden je nach bedarf "bits und bytes" geladen, je nach Abfragung ( READBYTE, READLONG usw )
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
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
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...
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:
error: 3
"F:\GLBasic\GLBasic\Editor\Editor.gbas"(74) error : Keine Datei
Das hier ist der (noch sehr grobe) Code dazu:
// --------------------------------- //
// 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
deiner seltsamen Logik in load_data kann ich nicht so ganz folgen. Allerdings liest du eine Zeile immer in text$[0] ein, weil tmp nirgends hochgezählt wird. Das Teil liest auch fleissig, vermutlich bis über das Dateiende hinaus, daher dann die Meldung "Keine Datei".
Selbsterklärend ist das für mich nicht.
counter = id + 20
aha, aber weder counter noch id werden anschließend verändert, nur tmp_counter, also ist id immer < counter ==> Endlosschleife. Damit liest du irgendwann über das Dateiende hinaus.
Ich sollte keinen Code online stellen, in dem ich vorher herum "gepfuscht" habe :D
Eigentlich hatte ich die Schleife auskommentiert und drei DEBUGs drin stehen! *ggg*
Ich korrigiere den Code heute Abend mal und stelle die richtige Version online... Ich hab die falsche Version hoch geladen...
Ab 00:00 ist das Hirn etwas schwerfällig, wenn es um's denken geht :nana:
So, habe den Code mal etwas korrigiert. Seltsamerweise funktioniert er auf meinem Rechner noch immer nicht, identische Fehlermeldung, jedoch auf dem Laptop fehlerfrei... :blink:
Wieso auch immer. Ich werde wohl GLBasic mal neu installieren müssen und alles aus der Registry raus klopfen.
Wenigstens funktioniert es jetzt mal richtig... =D
jo, das funktioniert besser :)
bereinige doch erst mal einfach das Kompilier-Verzeichnis und versuchs noch mal, bevor du alles neu installierst.
Genauso mache ich es...
Ich werde mal ein bißchen an meinem Text - Editor weiter arbeiten. Soll ich dafür einen eigenen Threat eröffnen, damit ihr mitschauen und schimpfen könnt?
Und ja, bitte schimpft... :D
Gegenfrage:
Warum willst du dir das antun?
Einen Editor mit GLBasic ist so ... so wie einen First-Person-Shooter mit ABAP-OO zu schreiben :)
Ich erkläre es dir mal so:
Im Moment quäle ich mich im Studium und in der Arbeit mit Java und div. Tomcat - Servern herum, komme kaum zum Zocken oder zu sonst irgendwas... Und das nervt...
Ich hätte 3 Projekt bei denen ich nicht voran komme:
1. LR - mein Überprojekt, das ich inzwischen 10mal redesignt habe und das ich erst dann neu starten werde, wenn ich mit allen meinen Design - Dokumenten fertig bin
2. ein Physik Testprojekt - leider fehlen mir hierzu noch zig Infos um auch nur irgendwie voran komme, zu 10% funktioniert schon alles mit Newton, leider sind die Infos zu Newton aber etwas eingeschränkt
3. mein dynamic Window Testprojekt - das ich für LR entwickeln möchte und für das ich absolut keine Zeit habe
Also bastle ich mir einfach mal einen Editor zusammen, als "mir ist langweilig in der FH und ich mag nicht mehr zuhören nach einen 8 Stunden Tag" - Projekt.
Außerdem kann ich da diverse Tests durchführen und testen, wie ich Daten richtig buffern kann --> das kann ich alles noch brauchen, irgendwann. Wenn es mir gelingt einige Elemente so zu entwickeln, daß ich sie auch in anderen Projekten einsetzen kann, dann erspare ich mir später einiges an Arbeit!
Und natürlich nicht zu vergessen die Herausforderung in GLBasic einen Text - Editor zu schreiben! Es geht dabei weder um sinnvoll oder etwas ähnliches... Es geht darum GLBasic zu bedienen wie Chuck Norris... :D
ok, Chuck Norris würde in zwei Tagen mit GLBasic Word schreiben, in 3D, ohne Entity-System
hmmmmm
Word in 3D...
Herausforderung angenommen :D
Nein, das mache ich lieber nicht, sonst killt uns Schranzi, weil wir wieder sinnloses Zeug programmieren... So wie damals den "Dem Stein beim wachsen zusehen - Simulator" :nana:
:D Freaks !
@Schranz0r: Du bist ja nur neidisch, weil du die Stimmen nicht hörst :P :booze:
Ne, mich labert aber den ganzen Tag der Typ neben mir zu... Komisch der schaut mir auch sehr ähnlich, sollte ich mir sorgen machen?
Ach weißt....ich leb auch in meiner eigenen Welt....aber macht euch keine Sorgen..... Man kennt mich da....lach