Seite 1 von 1

Forth-Screen umwandeln in einem Text ohne Sonderzeichen.

Verfasst: 28.04.2013 10:26
von funkheld
Hallo guten Tag.
Ich möchte bitte einen Textscreen in eine sogenannte Bin-Datei umwandeln.
Es gibt keine Zeilenumbrüche oder Screen-Trennzeichen oder Screen-Nummern. Alles kommt hintereinander; jede Zeile ist genaus 32 Zeichen lang. Reicht der Text nicht muss eine Zeile ausgefüllt werden mit H20 bis 32.
Ein Screen ist 512 Byte gross, nach 512 Byte fängt der nächste Screen an (sind 16 Zeilen).
Wenn der Text bei einem Screen zb bei 208 Byte zuende ist, dann muss noch bis 512 Byte mit H20 ausgefüllt werden.
In der Zeile wird mit keinem Leerzeichen angefangen.

Dieser Text : "Screen # 01 -----------------------" muss rausgefiltert werden und davon "00 \ 20 Z80 - Forth Asssembler" muss die Zeilennummer "00" entfernt werden.

Wie kann die Filterung mit Purebasic bitte gemacht werden ?

Danke.

Gruss
peter

Code: Alles auswählen

Screen # 01 -----------------------

00 \ 20 Z80 - Forth Asssembler
01
02 ONLY FORTH ALSO  DEFINITIONS
03 DECIMAL
04 ASSEMBLER ALSO  DEFINITIONS
05
06  DEFER C, FORTH ' C,
07  ASSEMBLER IS C,
08  DEFER ,  FORTH ' ,
09  ASSEMBLER IS ,
10  DEFER HERE FORTH ' HERE
11  ASSEMBLER IS HERE
12  DEFER >MARK
13  DEFER ?>RESOLVE
14  DEFER <MARK
15  DEFER ?<RESOLVE

Screen # 02 -----------------------

00 \    Z80 - Forth Asssembler
01 HEX
02 : REG   ( Adrmode Registercod--)
03      (  5x |  3b mode |  8b reg)
04    SWAP  100 *  OR CONSTANT ;
05 VARIABLE DISPL
06 : DISP!   DISPL ! ;
07 : XY   C,  0F000 OR ;
08  0 0 REG (BC)   0 10 REG (DE)
09  1 0 REG #      1  1 REG #)
10  2 0 REG B      2  1 REG C
11  2 2 REG D      2  3 REG E
12  2 4 REG H      2  5 REG L
13  2 6 REG (HL)   2  7 REG A
14 3 00 REG BC     3 10 REG DE
15 3 20 REG HL     3 30 REG AF

Re: Forth-Screen umwandeln in einem Text ohne Sonderzeichen.

Verfasst: 28.04.2013 13:19
von NicTheQuick
Hiermit geht es ganz einfach, indem die Datei zeilenweise durchlaufen wird und entsprechend reagiert wird.

Code: Alles auswählen

Define inputFile.s = "/home/nicolas/tmp/testscreen.txt"
Define binFile.s = "/home/nicolas/tmp/binscreen.bin"

If Not ReadFile(0, inputFile)
	MessageRequester("Fehler", "Kann Datei '" + inputFile + "' nicht lesen.")
	End
EndIf

If Not CreateFile(1, binFile)
	MessageRequester("Fehler", "Kann Datei '" + binFile + "' nicht schreiben.")
	End
EndIf

Define line.s, screen.s
While Not Eof(0)
	line = ReadString(0)
	If (Left(line, 9) = "Screen # ") ;Neuer Screen beginnt
		screen = Left(screen, 512)	;Screen kürzen, falls er mehr als 512 Bytes hat
		screen = LSet(screen, 512, " ")	;Screen mit Leerzeichen erweitern, falls es noch nicht 512 Bytes sind
		WriteString(1, screen, #PB_Ascii)
		screen = ""
	ElseIf (line = "") ;mach nichts
		;do nothing
	Else
		line = Mid(line, 4)	;Zeilennummer filtern
		line = Left(line, 32) ;sicherheitshalber die Zeile auf 32 Zeichen kürzen
		line = LSet(line, 32, " ") ;Zeile auf 32 Zeichen erweitern, indem man sie mit Leerzeichen füllt
		screen + line ;Neue Zeile an den Screen-Zeile anhängen
	EndIf
Wend
WriteString(1, screen, #PB_Ascii) ;Letzten Screen schreiben

CloseFile(0)
CloseFile(1)

Re: Forth-Screen umwandeln in einem Text ohne Sonderzeichen.

Verfasst: 28.04.2013 14:29
von funkheld
Au man...danke. Die Bin-Dateien funktionieren wunderbar.

Da hätte ich mir Zähne ausgebissen.
Ich weiss garnicht wie ich da anfangen soll.

Danke.

Gruss
peter

Re: Forth-Screen umwandeln in einem Text ohne Sonderzeichen.

Verfasst: 28.04.2013 15:54
von funkheld
Ich habe noch einmal eine Bitte.
Im Z1013 kann ich bei Forth nur max 5 umgewandelte Screen einlesen.
Wenn ich jetzt ein Text mit 20 Screens habe , wie kann man davon immer nur 5 Screen einlesen und dann eine neue Bin anlegen mit den weiteren 5 Screen , bis die Datei zu ende ist und die Namen der Bin-Datei eine 0, 1,2... am Ende bekommen zb copy0.bin copy2.bin usw.

Danke.

gruss
pete