Forth-Screen umwandeln in einem Text ohne Sonderzeichen.

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

Forth-Screen umwandeln in einem Text ohne Sonderzeichen.

Beitrag 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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

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

Beitrag 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)
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

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

Beitrag 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
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

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

Beitrag 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
Antworten