Nur Zahlen als Binärdatei hintereinander abspeichern

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von funkheld »

Hallo, guten Tag.
Ich möchte diesen Text so wie er da steht auswerten und nur die Zahlen von den Sprite hintereinander in eine Binärdatei auslagern.
Wie kann man das Realisieren.

danke.

gruss

Code: Alles auswählen

; Sprite 0

0,0,0,0,0,0,8,192,0,8,176,0,9,140,0,5,6,0,5,14,0,6,242,0,1,141,224,1,8,32,1,8,96,1,136,64,63,8,64,40,16,224,32,16,32,16,16,0,8,16,0,15,240,0,0,0,0,0,0,0,0,0,0,5

; Sprite 1

0,0,0,2,0,0,4,96,0,4,216,0,2,134,0,2,130,0,3,71,0,1,177,0,1,12,0,1,9,224,49,136,32,47,8,96,64,8,64,32,32,128,16,33,192,16,32,64,15,160,0,0,96,0,0,0,0,0,0,0,0,0,0,5

Zuletzt geändert von funkheld am 25.09.2011 12:01, insgesamt 1-mal geändert.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von NicknameFJ »

Hallo Funkheld,

ich gebe Dir absichtlich keinen Quellcode, schließlich sollst Du ja was lernen (durch Eigeninitiative).

Du kannst die Daten (so wie Du Sie hier gepostet hast) in eine Textdatei speichern.

Diese kannst Dann zeilenweise mit READSTRING auslesen und die entsprechenden Zeilen mit STRINGFIELD in die einzelenen Zahlenwerte aufsplitten und mit VAL in eine Zahl umwandeln. Die so generierten Zahlenwerte kannst Du dann in eine neue Datei abspeichern.

Wenn Du Fragen hast, kannst Du gerne nochmal posten.

NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von c4s »

Eine Beispiel-Zeile hätte auch gereicht. /:->


Zu deiner Frage:
  1. ReadString() zum einlesen jeder Zeile
  2. CountString(), StringField() und Val() zum herauslesen jeder Zahl
  3. WriteByte() zum abspeichern als "Binärdatei"
Im Grunde hat bereits NicknameFJ alles wichtige gesagt. <)
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von funkheld »

ReadString() zum einlesen jeder Zeile
CountString(), StringField() und Val() zum herauslesen jeder Zahl
WriteByte() zum abspeichern als "Binärdatei"
Jup, dieses wissen fehlte mir.

Nun, mit dieser Zeile setze ich das erste Byte auf "0".
text="0"
WriteCharacter(1, Val(text))


Wenn die Binärdatei erstellt wurde, möchte ich den Zähler "z1" in das erste Byte der Binärdatei reinsetzen.
Wie komme ich an das erste Byte von der Binärdatei zum reinschreiben?

Code: Alles auswählen

Global erg.l,textzeile.s,text.s,z.l,z1.l

SetCurrentDirectory("d:\purebasic\data\") 

OpenConsole()
EnableGraphicalConsole(1)

CreateFile(1, "sprite.bin") 

text="0"
WriteCharacter(1, Val(text))   

If ReadFile(0, "sprite.txt")   
  While Eof(0) = 0   
    textzeile=ReadString(0)
    erg=CountString(textzeile, ",")
    If erg=63
      z1=z1+1
      For z=1 To erg+1
        text=StringField(textzeile, z, ",")
        WriteCharacter(1, Val(text))   
      Next 
    EndIf  
  Wend
  CloseFile(0)      
  CloseFile(1)         
EndIf

PrintN(Str(z1))  
Input()


danke.
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von Sirius-2337 »

FileSeek() sollte da helfen.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von NicknameFJ »

Hallo Funkheld,

mit Fileseek() kannst Du wie Sirius2337 bereits gesagt hat den Schreib-/Lesezeiiger direkt auf eine bestimmte Position setzen. Dies brauchst Du aber in deinem Programm wahrscheinlich gar nicht weil Du doch sowieso die Binärdaten in der richtigen Reihenfolge in die Datei schreibst. Nach CreateFile() steht der Schreib-/Lesezeiger sowieso am Dateianfang. Du brauchst Fileseek() nur dann, wenn Du nicht sequential auf die Daten zugreifen willst.

Grüße

NicknameFJ
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von Sirius-2337 »

@NicknameFJ

Er will aber glaub ich während des Schreibens der Datei z1 hochzählen und zum schluss wieder an den Anfang sprigen und dort z1 Speichern.
Dafür brauch er dann FileSeek().
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von NicknameFJ »

@Sirius
funkheld hat geschrieben:

Wenn die Binärdatei erstellt wurde, möchte ich den Zähler "z1" in das erste Byte der Binärdatei reinsetzen.
Wie komme ich an das erste Byte von der Binärdatei zum reinschreiben?

Da hast Du wohl mit Deiner Anmerkung an mich recht !
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Nur Zahlen als Binärdatei hintereinander abspeichern

Beitrag von funkheld »

Jup, danke.
Funktioniert jetzt.

Wenn ich die Spritedaten gelesen habe, brauche ich die Anzahl die von dem Programm erstellt worden sind.


gruss
Antworten