Ergebnis 1 bis 17 von 17

Thema: Marshal.load

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ich werde das mal ausprobieren und dann die Ergebnisse posten.

    Gruß,
    WangXu

    Edit:
    Also: ich habe jetzt alle Kombinationen ausprobiert, die mir eingefallen sind. Aber leider kommt immer der gleiche
    Datenschrott dabei raus.
    Ich arbeite übrigens parallel mit dem Maker und Ruby. Wenn ich also mit Ruby eine Möglichkeit finde eine lesbare Textdatei zu erzeugen kann ich die damit auch wieder in das rvdata Format konvertieren. (scite erkennt zumindest, daß es sich um utf-8 handelt, kann die Zeichen aber nicht darstellen; schreddert mir aber nicht sofort die Daten, sondern erst, wenn sie in das Textfile geschrieben werden.)

    Geändert von WangXu (20.03.2009 um 19:12 Uhr)

  2. #2
    Nur damit ich das richtig verstehe. Du willst mit Marshal.dump ein Objekt in eine Datei schreiben, und diese dann mit einem Texteditor auslesen?

  3. #3
    Genau. Bzw. die Langform: Ich möchte den Inhalt der rvdata in eine Textdatei verfrachten, dort editieren und wieder in eine rvdata zurück konvertieren können. Dieser Aufwand dient dazu eine zusätzliche rvdata einzubinden, die Informationen für eine zusätzliche Ausrüstungskategorie enthalten soll, die ich separat ansteuern kann.

    Gruß,
    WangXu

  4. #4
    Dann bringt dir Marshal.dump rein gar nichts. Marshal.dump ist dafür da, Objekte in einen Datenstrom zu speichern, um sie z.B. in einer Datei abzuspeichern oder übers Netzwerk zu verschicken. Der Sinn dahinter war nie, das ganze in einer für Menschen lesbaren Form darzustellen.
    Um das zu erreichen müsstest du die Objekte schon selber in ein Format wie csv oder xml bringen, und sie dann abspeichern und wieder auslesen.

  5. #5
    *argh* man soll keine fünf Sachen gleichzeitig tun. Genau anders herum wäre richtig gewesen: Mit Marshal.load die Objekte aus dem Datenstrom herauslesen und in eine Textdatei speichern. Editieren und wieder dumpen.
    Kannst du mir unter dieser Prämisse weiterhelfen?

    Gruß,
    WangXu

  6. #6
    Ich hab mir mal für mein eigenes Projekt eine Klasse geschrieben mit der ich Daten aus einer Datei lesen kann, da ich selber ein paar zusätzliche Stats für Items und Ausrüstung gebraucht habe.

    Code:
    class ValueReader
      def initialize(filename, delimiter = $;)
        @filename = filename
        @delimiter = delimiter
      end
      
      def read
        File.open(@filename) do |file|
          lines = file.readlines.select{|line| line.strip.size > 0 && line.lstrip[0, 1] != '#'}
          lines.each do |line|
            values = line.strip.split(@delimiter)
            values.each {|v| v.strip!}
            yield values
          end
        end
      rescue Exception => ex
        print ex.message
      end
    end
    Die read Methode geht dabei alle Zeilen einer Klasse durch, die nicht leer sind, oder nicht # als erstes Zeichen, welches kein Leerzeichen ist, enthält, und gibt sie an einen Block weiter.

    Angenommen du hast nun ein zusätzliches Stat für Waffen, namens stat1, in deinem Spiel, könnte die Verwendung in etwa so aussehen:

    Code:
    vr = ValueReader.new('dateiname')
    vr.read {|id, stat1| $data_weapons[id].stat1 = stat1}
    Dazu bräuchtest du dann nur eine Datei, welche pro Zeile eine Waffe enthält, und jeweils ID und den Wert von Stat1 durch ein Whitespace getrennt beinhaltet. Das Trennzeichen kann man auch im Konstruktor als 2. Parameter bestimmen.
    Natürlich sind auch mehr als nur 2 Werte möglich.
    Das ist zwar nicht ganz, das was du wolltest, aber die Notwendigkeit alle Stats in eine Datei zu schreiben, nur um ein paar davon zu ändern, sehe ich eigentlich eh nicht wirklich.

    Geändert von The_Burrito (25.03.2009 um 09:29 Uhr)

  7. #7
    Danke. Ich werde mir das, wenn ich wieder etwas freie Zeit habe mal genauer anschauen.

    Gruß,
    WangXu

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •