Dateiformate lesen/schreiben - welches nutzt man wofür?

Es gibt 56 Antworten in diesem Thema, welches 4.370 mal aufgerufen wurde. Der letzte Beitrag (16. Dezember 2024 um 18:23) ist von strik.

  • Sehr schöner Infothread, inhaltlich habe ich dazu auch nicht mehr viel beizutragen.

    Meines Wissens ist es egal wie eine Datei heisst, man kann doch alles laden, kommt nur darauf an WOMIT und WIE und nicht wie die Datei heisst.

    Also für die Urpsrungsfrage: Wenn es darum geht die User davon abzuhalten, nenn die Datei ".DAT". Ich speicher alles außer dem Main PRG in DAT Dateien, Assembler code, Daten etc.

  • .DAT hört sich gut an.

    Wie muss der String aussehen?

    SAVE"name,....",8

    Meine VC20 Projekte:

    🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen.

  • Wolltest Du nicht nur ein paar Daten ablegen? In BASIC könnte das so aussehen.

    Hier ein Auszug aus meinem Kassettenloader aus 1985:

    3350 a$="filename":print"Kassette einlegen.":poke198,0:wait198,1:print

    3360 open2,1,1,a$

    3370 fori=1toag:printBitte melde dich an, um diesen Link zu sehen.,ng(i):next

    3380 close2

    3465 open2,1,0,a$

    3470 fori=1toag:inputBitte melde dich an, um diesen Link zu sehen.,ng(i):next

    3485 close2

  • Das geht ja schon wieder anders :cry:

    Ich muss es in Assembler realisieren ....

    Meine VC20 Projekte:

    🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen.

  • Hmm ok, ich glaube in der Richtung habe ich noch nichts, was Dein Problem direkt lösen könnte.

    Es sollte sich aber code finden lasse der wir oben seq und rel Daten in Assembler liest, reine Datenblöcke in PRG ist ja ein nobrainer.

    Eines meiner Projekte verwendet zig PRG Dateien aber nur eine ist sinvvoll benannt. Kann ja nix passieren, die Leute laden ja in der Regel keine Dateien die "0034.PRG" heissen wenn es eine "GAME.PRG" gibt die ganz oben liegt.

  • Ich muss es in Assembler realisieren ....

    Vielleicht hilft Dir das weiter....

    Bitte melde dich an, um diesen Link zu sehen.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • aitsch So, ich denke, ein wenig Code wird dir weiter helfen. In meinem Solitaire-Spiel speichere ich die folgenden Daten in einer Datei namens "STATSSOL" vom Typ PRG ab. Die Daten sind

    Code
    ; To save on disk -----------
    Stats_Time0     !byte 0,10 ;best, format: sec, min
    Stats_Time1     !byte 0,20 ;2nd best
    Stats_Time2     !byte 0,30 ;3rd best
    Stats_Wins      !byte 0,0
    Stats_Lost      !byte 0,0
    Stats_WithTimer !byte 1; If 0, timer is not shown and time not considered
    Stats_CardColor !byte 9;14; color code for card color
    Stats_Pattern   !byte 0; [0,1, or 2]
    Stats_SoundOn   !byte 1

    Die liegen an einer festen Stelle XXYY im Speicher. Wenn du die als PRG abspeicherst, sind die ersten beiden Bytes in der PRG-Datei YY und XX. Beim Reinladen (zu Beginn des Spiels) werden die dann genau an die Speicherstelle XXYY geladen. Praktisch!

    Hier meine Lade- und Save-Routinen. Vielleicht kannst du ja was damit anfangen.

    Das ist sicher nicht perfekt, aber es funktioniert. Und wenn hier einige meckern wollen wegen des "@:" - ich hab das Spiel nun schon zigtausend Mal gespielt und hatte nie Probleme damit. Es wird nach jedem Sieg bzw. Verlust gespeichert. Also ca. 4000 Speicherungen ohne einen Fehler.

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

    3 Mal editiert, zuletzt von WebFritzi (13. Dezember 2024 um 13:17)

  • sname !text "@0:STATSSOL"

    Du kennst den Bug der 1541/1570/1571?

    Ich mache das immer so: ich schreibe

    sname !text "s:statssol"

    dann schickst Du den Befehl ab, mit dem Open-Befehl nimmst Du einfach (sname+2), die Länge des Namens natürlich auch -2, und Du läufst nicht Gefahr, dass Dir das Dos Dateien zerstört.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • sname !text "@0:STATSSOL"

    Du kennst den Bug der 1541/1570/1571?

    Siehe letzte Zeilen in meinem letzten Post. :wink:

    Ich mache das immer so: ich schreibe

    sname !text "s:statssol"


    dann schickst Du den Befehl ab, mit dem Open-Befehl nimmst Du einfach (sname+2)

    Welchen Befehl schicke ich ab? Und OPEN gibt es bei mir oben gar nicht. Ich wette, deine Version ist sicherer, aber ein bisschen mehr Detail wäre schön (auch für aitsch ).

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.
  • Welchen Befehl schicke ich ab? Und OPEN gibt es bei mir oben gar nicht. Ich wette, deine Version ist sicherer, aber ein bisschen mehr Detail wäre schön (auch für aitsch ).

    Den Scratch-Befehl per Open vor dem Speichern abschicken (OPEN wird in dem Link von mir aus Post Bitte melde dich an, um diesen Link zu sehen. verwendet), natürlich auch CLOSE und danach speichern (also Dein Code nur mit sname+2 als Adresse). Reicht das?

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Moin aitsch

    Ich hatte beim schreiben von QIM 4 (Thread: Bitte melde dich an, um diesen Link zu sehen.)

    auch diese Überlegungen, ich habe mich für SEQ entschieden.

    Anbei eine Beispiel Routine, mit der ich eine QIM ID erzeugt habe - sehr einfach eingebaut - kannst bestimmt easy durchblicken !

    Die .SEQ Datei durfte ich nicht hochladen :smile:

    Dateien

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.

  • Welchen Befehl schicke ich ab? Und OPEN gibt es bei mir oben gar nicht. Ich wette, deine Version ist sicherer, aber ein bisschen mehr Detail wäre schön (auch für aitsch ).

    Den Scratch-Befehl per Open vor dem Speichern abschicken (OPEN wird in dem Link von mir aus Post Bitte melde dich an, um diesen Link zu sehen. verwendet), natürlich auch CLOSE und danach speichern (also Dein Code nur mit sname+2 als Adresse). Reicht das?

    Ja. Sorry, stand auf dem Schlauch. Hab das "s" nicht gepeilt. Ok, so wird n Schuh draus.

    Die .SEQ Datei durfte ich nicht hochladen :smile:

    Du könntest ein D64 mit PRG und SEQ darin hochladen.

    Ich hatte die Statistiken auch anfangs als SEQ gespeichert. Aber dann bin ich drauf gekommen, dass ich mich mit PRG nicht um die Adressen kümmern muss. Das fand ich für meine Zwecke praktischer.

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.
  • An welcher Stelle gebe ich im Code die Info mit, welcher Dateityp gelesen/gespeichert werden soll?

    Brauchst du nur beim Anlegen. Es kann immer nur eine Namen geben, egal welchen Typs (mal abgesehen von Directory-Editoren, die direkt im Directory herumfuhrwerken) - CBM-DOS lässt einen eine Datei anlegen, auch wenn die gleichnamige Datei einen anderen Typ hat. Daher braucht eigentlich beim Laden nur der Name (ohne Typbezeichnung) angegeben werden.

    So könnte man auch (mit einem Dir-Editor) auch eine Datei erstellen, die CBM-DOS vielleicht auch nicht mehr findet - ich bin mir nicht sicher, ob dann die Typangabe hier eine weiter hinten im Dir. liegende, gleichnamige Datei tatsächlich findet.

  • An welcher Stelle gebe ich im Code die Info mit, welcher Dateityp gelesen/gespeichert werden soll?

    ... Es kann immer nur eine Namen geben, egal welchen Typs (mal abgesehen von Directory-Editoren, die direkt im Directory herumfuhrwerken) - CBM-DOS lässt einen eine Datei anlegen, auch wenn die gleichnamige Datei einen anderen Typ hat. Daher braucht eigentlich beim Laden nur der Name (ohne Typbezeichnung) angegeben werden. ...

    Das ist eine wertvolle Info.

    Es kann also keine:

    DEMO.PRG &

    DEMO.DAT

    gleichzeitg auf einer Disk geben.

    Und egal ob DEMO.DAT oder DEMO.PRG, ich lade immer mit :

    Code
    LOAD"DEMO",...".

    Das erspart mir jede Menge Frust beim Umsetzen :thumbup:

    Meine VC20 Projekte:

    🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen. 🕹 Bitte melde dich an, um diesen Link zu sehen.

    2 Mal editiert, zuletzt von aitsch (13. Dezember 2024 um 16:11)

  • Die Syntax @0: gilt als Workaround für den Bug. Siehe C64-Wiki: REPLACE (SAVE-@-Bug).

    Ehrlich: davon habe ich noch nie gehört. Wäre aber mal interessant, warum es mit der Null (angeblich) nicht auftritt. Aber wir bewegen uns mit dem Exkurs dann doch schon OT.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Es kann also keine:


    DEMO.PRG &

    DEMO.DAT


    gleichzeitg auf einer Disk geben.

    Doch doch, das funktioniert ohne Probleme. Er meinte, eine DEMO als PRG und DEMO als SEQ.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Ich hatte die Statistiken auch anfangs als SEQ gespeichert. Aber dann bin ich drauf gekommen, dass ich mich mit PRG nicht um die Adressen kümmern muss. Das fand ich für meine Zwecke praktischer.

    Das hat übrigens noch einen kleinen Vorteil: wenn man den ARM2IEC benutzt (der kann ja Dolphindos), dann knattert Dolphindos volles Rohr drüber, beim SEQ ist es deutlich langsamer.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".