[GELÖST] ReadBank - Offset-Feld?
Übersicht

CO2ehemals "SirMO"Betreff: [GELÖST] ReadBank - Offset-Feld? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe (jetzt wirklich) ein Problem mit Banks: Wenn ich mit ReadBank Daten aus einer Datei in eine Bank laden will, weiß ich absolut nicht, was ich in das Feld "offset" packen soll. Gebe ich 0 ein, gibt es zwar keinen Fehler beim compilieren, jedoch wird auch nicht das richtige in die Bank geschrieben. Schreibe ich den Dateizeiger rein, ab dem die Daten stehen, gibt es einen "Illegal Bank Offset" - Fehler. Ich weiß nicht, was ich noch eintragen könnte... hoffe ihr könnt mir helfen... |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
- Zuletzt bearbeitet von CO2 am Do, Mai 23, 2013 12:27, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geh sicher, dass du offset in Bytes angibst, diesen richtig berechnet hast und auch genügend Platz in der Bank ist, für die Daten. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
ReadBank( bank:TBank,stream:TStream,offset,count ) tut folgendes: Es liest sich count Bytes aus dem Stream und kopiert sie in die Bytes von offset bis offset+count-1 der Bank hinein. Wenn du also die ganze Bank mit deinen Daten füllen willst, ist offset=0 richtig. Allerdings muss der Stream richtig eingestellt sein. Wenn ich es richtig verstanden habe, beginnen die Daten für die Bank nicht direkt am Anfang der Datei, sondern etwas später (nach einem Header). ReadBank fängt aber dort an zu lesen und zu kopieren, wo der Dateizeiger steht. Daher musst du dafür sorgen, dass der Dateizeiger genau auf dem Anfang der Daten steht, wenn du sie einlesen willst. Nutze, wenn es nicht so ist, SeekStream oder TStream.Seek.
ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antworte und entschuldigung, dass ich jetzt erst antworte.
@ Xeres: Wenn ich wüsste wofür offset ist, kann ich das machen ![]() @ ZEVS: Ok, danke... Werde mal auf der Basis was versuchen. Aber wofür gibt es dann überhaupt das offset - Feld, wenn nur 0 eingetragen werden kann? PS: Ich tagge das Thema mal als [GELÖST]... |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie kommst du darauf, offset könne nur 0 sein?
Nochmal deutlich: Der Offset gibt an, wie viele Bytes übersprungen werden, bevor begonnen wird zu lesen. Wenn man mit Dateien/Streams arbeitet, muss man auch darauf achten, nicht mehr zu lesen, als Daten vorhanden sind. In Streams wird der Offset nur intern gespeichert und kann mit Seek manuell gesetzt werden. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Xeres hat Folgendes geschrieben: Der Offset gibt an, wie viele Bytes übersprungen werden, bevor begonnen wird zu lesen.
Und ich behaupte: Offset gibt an, ab welcher Position in der Bank geschrieben wird, wie bei allen Bank-Befehlen ![]() ![]() Los, Mod-Fight! /me holt schon mal das Planschbecken mit dem Schlamm Wer schreibt den Code, der meine Aussage beweist? @CO2: Wenn's nicht klappt, wenn du den Zeiger der Daten reinschreibst, wär's gut zu wissen, wie gross die Bank ist, die du erstellst, wie die Datei aufgebaut ist und ab welcher Position du lesen möchtest. Ist dein Problem wirklich schon gelöst? mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn mir der verehrte Herr Holzchopf erklären kann, wie er mit ReadBank etwas in eine Bank schreiben will, bleibe ich den Rest meines Lebens im Planschbecken.
Aber ansonsten möchte ich mir anschließen; gut möglich, dass wir aneinander vorbei reden und Code würde ganz eindeutig zeigen, wo das eigentliche Problem liegt. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die unfehlbare BMax-Doku hat Folgendes geschrieben: Read bytes from a Stream to a Bank
Bittesehr ![]() |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh, ich wollte jetzt keinen Mod-Fight hervorrufen ![]() Also das Problem an sich ist gelöst - ich weiß ungefähr, wofür das offset-Feld ist. Trotzdem werden die Daten falsch ausgelesen... Hier der Code: Speichern des Paketes BlitzMax: [AUSKLAPPEN] Function SavePackage(Request:Int = True) Hier die Funktion zum Auslesen einer Datei BlitzMax: [AUSKLAPPEN] Function LoadFileFromPac:TBank(PAC:TStream, FileName:String) |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du sagst, das Auslesen klappt nicht, also gehe ich davon aus, dass das Schreiben fehlerfrei verläuft. Es wäre natürlich interessant zu wissen, welche "falschen" Daten ausgelesen werden. Der genaue Sinn von BlitzMax: [AUSKLAPPEN] Repeat erschließt sich mit nicht, wenn ich es richtig verstanden habe, werden alle Zeilen bis "[DAT]" übersprungen. Aber wozu dann das ReadInt? Der Rest sieht in Ordnung aus, soweit ich das Dateiformat verstanden habe. Im Zweifelsfall: DebugLog ist dein Freund. Gebe dir doch mal die Streamposition, SeekSize und SearchFileSize aus und vergleiche mit dem, was du erwarten würdest. ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ ZEVS:
Da die Daten im [REG] - Teil so abgespeichert werden, dass zuerst der Dateiname und dann die Dateigröße geschrieben wird, muss ich natürlich - Wenn ich im [REG] - Teil die entsprechende Datei mit der dazugehörigen Größe gefunden habe - den restlichen Teil bis zum [DAT] - Teil überspringen, Die Dateinamen muss ich abspeichern, da ich ja kontrollieren muss, ob ich den [DAT] - Teil erreicht habe. Das ReadInt() ließt dann einfach Temporär die "Dateigröße" aus, welche ich natürlich nicht brauche und deshalb nicht abspeichere. |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aaaalso. Dein Datei-aufbau ist klar: nach [DAT] folgen nahtlos Dateiinhalte (unschwer zu erkennen am Kommentar, top! ![]() ![]() (StreamPos(PAC) + SeekSize - 4)(4, weil ein Int vier Byte beansprucht), oder, eleganter, das ReadInt() direkt nur wenn nötig durchführen: BlitzMax: [AUSKLAPPEN] Repeat mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh, ja... Das hatte ich gar nicht gesehen ![]() Funktioniert! Hier nochmal die funktionierende Version der LoadFileFromPac-Funktion sowie eine abgewandelte Version der SavePacFile-Funktion (Falls sie jemand braucht ![]() Rem |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group