file_text_writeln nur mit read anstelle von write?

  • file_text_writeln nur mit read anstelle von write?

    Hallo, ich habe weder per Suchfunktion noch über Game Maker Help etwas zu meinem Problem gefunden, also bin ich mal so frei und frage hier :P

    Ich habe ein Text-File, in welches unterschiedliche Daten geschrieben werden. Diese werden dann von diversen Objekten(im Moment nur eines, da ein Test ) eingelesen. Jetzt würde ich allerdings gerne an einer beliebigen Stelle des Files schreiben können, was ja mit den mir bekannten Funktionen nicht möglich ist. Es wär wahrscheinlich möglich, den ganzen Text vorerst in ne Variable oder nen Array zu speichern und anschliessend erst das Textfile überschreiben, jedoch ist mir das zu aufwändig, desweiteren sollten die Daten auch nach Programmende erhalten bleiben.

    Irgendwelche Ideen?

    Danke im vorraus. =)
    "das war meine letzte flamewar PM an dich ."
  • Dazu müsste ich die Funktion file_text_open_read() aufrufen, was ja wiederrum keinen Sinn macht, da ich innerhalb des Textes etwas hinzufügen möchte und dabei faul bin..
    "das war meine letzte flamewar PM an dich ."
  • Das was du willst ist ohne weiteres technisch nicht möglich, da das Dateisystem so funktioniert, dass jede Datei ein Strom von Bytes darstellt. Wenn du aber in einer bestimmten Stelle in so einem Strom Daten einfügen willst würden die dort liegenden Daten überschrieben, was du sicher nicht willst. Deshalb müsstest du alle nachfolgenden Daten nach hinten verschieben wofür der GM allerdings keine Möglichkeit bereitstellt. Das was du willst kannst du dennoch indirekt realisieren, also ohne die komplette Datei neu zu schreiben indem du die Datei aus einem Netz von Zeigern aufbaust, was für deine Zwecke aber sicher zu kompliziert wäre, aber von der Performance her am schnellsten ist, besonders bei sehr großen Dateien. Ich empfehle dir also so wie du schon gesagt hast den kompletten Inhalt der Datei zu lesen, an der entsprechenden Stelle Daten einzufügen, und wieder alles zurück zu schreiben.
  • Das mit dem Überschreiben hab ich mir dann auch vorgenommen, hat zwar dann nicht funktioniert, dürfte aber trotzdem kein grosses Problem darstellen. :P

    Was verstehst du unter "Netz von Zeigern"? Gibts beim GM etwa auch Pointer, oder meinst du damit das Durchlesen und Speichern etwa von Wörtern in Arrays oder sowas?

    Andere Frage, passt zwar nicht hier rein, wär aber nicht Grund genug zum erstellen eines neuen Threads. Wie schnell ist es,Screenshots von Teilbereichen des Bildschirms zu speichern und direkt auszugeben? Es geht um mehrere Views, von denen ich jeweils nur eine aktiv zu haben brauche, und die anderen Views inklusive derer Inhalt nicht gebraucht werden, und eben ein Sprite anstelle der View gezeichnet würde. Es müsste dabei ein schnelles ressourcenschonendes Wechseln von Sprite(oder was auch immer) zu View möglich sein. Sinnvoll?
    "das war meine letzte flamewar PM an dich ."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von blubberblub ()

  • Ein Zeiger sind lediglich Daten die die Position von anderen Daten beschreiben. Wenn man im GM einer Variable die ID einer Instance zuweist könnte man diese Variable auch als Zeiger verstehen. In einer Datei, also in einem Bytestrom, ist ein Zeiger einfach eine Folge von Bytes, die eine Byteposition innerhalb der Datei beschreiben. Dadurch ist es eben möglich, dass man nicht alle Daten hintereinander in eine Datei schreiben muss und dann Probleme beim Einfügen hat, sondern man hängt einfach die einzufügenden Daten hinten an und setzt entsprechend Zeiger um "zu zeigen wo's lang geht" ;). Das klingt jetzt natürlich einfacher als es ist, aber das ist die Idee dahinter.

    Zu deiner Frage mit dem Screenshot: Das könntest du mit surfaces lösen. Einfach ein surface erstellen. Das zeichnen auf dieses Surface einstellen mit surface_set_target, und screen_redraw ausführen.
  • file_bin hatte ich versucht, allerdings schien dies nicht miteinander zu harmonieren :P

    Ein Zeiger sind lediglich Daten die die Position von anderen Daten beschreiben. Wenn man im GM einer Variable die ID einer Instance zuweist könnte man diese Variable auch als Zeiger verstehen. In einer Datei, also in einem Bytestrom, ist ein Zeiger einfach eine Folge von Bytes, die eine Byteposition innerhalb der Datei beschreiben. Dadurch ist es eben möglich, dass man nicht alle Daten hintereinander in eine Datei schreiben muss und dann Probleme beim Einfügen hat, sondern man hängt einfach die einzufügenden Daten hinten an und setzt entsprechend Zeiger um "zu zeigen wo's lang geht" . Das klingt jetzt natürlich einfacher als es ist, aber das ist die Idee dahinter.

    Hab ich das richtig verstanden? Man zähle beim lesen die Zeichen und bei entsprechenden "Merkmalen" im Text wird ein Zeiger auf die Position gesetzt, an den man anschliessend das zu Addierende im String anknüpft?

    Gibt es grosse Unterschiede zwischen dem normalen Drawen der Surface und dem Zeichnen des skalierten Bereichs(es gibt ja die eine texture_blabla funktion)?

    Danke =)
    "das war meine letzte flamewar PM an dich ."