Seite 1 von 1

Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 10:51
von funkheld
Hallo, guten Tag.
Ich lese mit der Routine eine ASM-Bin ein zu einer Basiczeile.
Ganz am Ende soll kein Komma mehr stehen.

Wie mache ich das bitte?
----------------------------------------
data fastdli1() byte =$48, $48, $A9, $01, $8D, $0A, $D4, $A9, $C5, $8D,
data byte = $1A, $D0, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A,
data byte = $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4,
data byte = $8D, $0A, $D4, $8D, $0A, $D4, $A9, $89, $8D, $1A,
data byte = $D0, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4,
data byte = $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D,
data byte = $0A, $D4, $8D, $0A, $D4, $A9, $41, $8D, $1A, $D0,
data byte = $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D,
data byte = $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A,
data byte = $D4, $8D, $0A, $D4, $A9, $69, $8D, $1A, $D0, $8D,
data byte = $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A,
data byte = $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4,
data byte = $8D, $0A, $D4, $A9, $00, $8D, $1A, $D0, $8D, $0A,
data byte = $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4,
data byte = $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D,
data byte = $0A, $D4, $A9, $89, $8D, $1A, $D0, $8D, $0A, $D4,
data byte = $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D,
data byte = $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A,
data byte = $D4, $A9, $00, $8D, $1A, $D0, $8D, $0A, $D4, $8D,
data byte = $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A,
data byte = $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4,
data byte = $A9, $A9, $8D, $1A, $D0, $8D, $0A, $D4, $8D, $0A,
data byte = $D4, $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4,
data byte = $8D, $0A, $D4, $8D, $0A, $D4, $8D, $0A, $D4, $A9,
data byte = $00, $8D, $1A, $D0, $8D, $0A, $D4, $68, $68, $40, letzte Komma soll immer weg.
---------------------------------------------------------------------
Danke.
Gruss

Code: Alles auswählen

Procedure data_inline()
  um=1
  
  If ReadFile(0, "d:\atari\asm\"+name_in2+".bin")
    CreateFile(1, "d:\atari\asm\"+name_in2+".txt")
    WriteStringN(1,"")
    WriteString(1,"data "+name_in2+"() byte =")
    
    While Eof(0) = 0
      If um <11
        zahl=ReadByte(0)
        WriteString (1,"$"+RSet(Hex(zahl), 2, "0") +", ")
      Else
        WriteStringN(1,"")
        WriteString(1,"data      byte =")
        WriteString(1,"  ")
        um=0
      EndIf
      um=um+1
    Wend
    WriteStringN(1,"")
    
    CloseFile(0)
    CloseFile(1)
  EndIf
EndProcedure

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 11:00
von RSBasic
Es gibt mehrere Möglichkeit. Eine davon wäre, wenn du nach ReadByte() erneut auf Eof prüfst. Wenn Eof = true (d.h. wernn das Ende der Datei erreicht wurde), dann schreibe kein Komma.
Pseudocode:

Code: Alles auswählen

[...]
zahl=ReadByte(0)
if Eof(0)
  WriteString (1,"$"+RSet(Hex(zahl), 2, "0"))
else
  WriteString (1,"$"+RSet(Hex(zahl), 2, "0") +", ")
endif
[...]

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 12:08
von Bisonte
Man könnte die Datei auch in den Speicher einlesen und danach aus dem Speicher per PEEKB zu den Data Zeilen generieren.
Dann hat man alle Daten die man braucht.

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 12:11
von ccode_new
Eine sinnvolle Herangehensweise wäre z.B solch eine ähnliche Überprüfung:

Code: Alles auswählen

;...
If Loc(0) < Lof(0) - 1
  WriteString (1,"$"+RSet(Hex(zahl), 2, "0"))
  WriteString (1, ", ")
Else
  WriteString (1,"$"+RSet(Hex(zahl), 2, "0"))
EndIf
;...

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 13:55
von juergenkulow
Hallo funkheld,

Idee war beim letzten Wert in der Zeile WriteString kein Komma schreiben zu lassen.
Habe versucht möglichst wenige Änderungen zu machen:

Code: Alles auswählen

Procedure data_inline(name_in2.s) ;  Dateiname in name_in2 übergeben. 1
  um=1

  If ReadFile(0, "e:\atari\asm\"+name_in2+".bin") ; Laufwerk angepasst 2
    CreateFile(1, "e:\atari\asm\"+name_in2+".txt") ; Laufwerk angepasst 2
    WriteStringN(1,"")
    WriteString(1,"data "+name_in2+"() byte =")
    
    While Eof(0) = 0
      If um <10                                   ; 11 auf 10 reduziert 4
        zahl=ReadByte(0)
        WriteString (1,"$"+RSet(Hex(zahl,#PB_Byte), 2, "0") +", ") ; Hex um #PB_Byte erweitert 3
      ElseIf um=10                                ; Elseif -Zweig eingefügt 5   
        zahl=ReadByte(0)
        WriteString (1,"$"+RSet(Hex(zahl,#PB_Byte), 2, "0"))  ; Hex um #PB_Byte erweitert 3      
      Else
        WriteStringN(1,"")
        WriteString(1,"data      byte =")
        WriteString(1,"  ")
        um=0
      EndIf
      um=um+1
    Wend
    WriteStringN(1,"")
    
    CloseFile(0)
    CloseFile(1)
  EndIf
EndProcedure

data_inline("fastdli1") ; Aufruf 6 

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 15:24
von funkheld
Danke für die Hilfe.

Ich habe es wohl ungenau geschrieben.
Das allerletzte Komma in der Datei muss weg, nicht in jeder Zeile.

Wenn die Zeile angefangen wird und erreicht nicht die 10 dann wird das Komma bei dir im Programm gesetzt.

Vielen dank.

gruss

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 16:09
von juergenkulow
Hallo,

2. Versuch:

Code: Alles auswählen

Procedure data_inline(name_in2.s) 
  um=1
  
  If ReadFile(0, "e:\atari\asm\"+name_in2+".bin") ; Laufwerk angepasst 
    CreateFile(1, "e:\atari\asm\"+name_in2+".txt"); Laufwerk angepasst 
    WriteStringN(1,"")
    WriteString(1,"data "+name_in2+"() byte =")
    
    While Eof(0) = 0
      If um <11                                   
        zahl=ReadByte(0)
        If Eof(0) = 0  ; Das Ende der Datei wurde noch nicht erreicht. 
          WriteString (1,"$"+RSet(Hex(zahl,#PB_Byte), 2, "0") +", ") 
        Else ; Das Ende der Datei ist erreicht, WriteString zahl ohne Komma ausgeben. 
          WriteString (1,"$"+RSet(Hex(zahl,#PB_Byte), 2, "0")) 
        EndIf 
      Else
        WriteStringN(1,"")
        WriteString(1,"data      byte =")
        WriteString(1,"  ")
        um=0
      EndIf
      um=um+1
    Wend
    WriteStringN(1,"")
    
    CloseFile(0)
    CloseFile(1)
  EndIf
EndProcedure

data_inline("fastdli1") 
Gruß

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 16:20
von ccode_new
Meine Lösung:

Code: Alles auswählen

Procedure data_inline(name_in2.s)
  um=1
  
  If ReadFile(0, name_in2+".bin")
    CreateFile(1, name_in2+".txt")
    WriteStringN(1,"")
    WriteString(1,"data "+name_in2+"() byte =")
    
    While Eof(0) = 0
      If um <11
        zahl=ReadByte(0)
        WriteString (1,"$"+RSet(Hex(zahl), 2, "0"))
        If Loc(0) <= Lof(0) - 1
          WriteString (1, ", ")
        EndIf
      Else
        WriteStringN(1,"")
        WriteString(1,"data      byte =")
        WriteString(1,"  ")
        um=0
      EndIf
      um=um+1
      Count + 1
    Wend
    WriteStringN(1,"")
   
    CloseFile(0)
    CloseFile(1)
  EndIf
EndProcedure

data_inline("test")

Re: Komma ganz am Ende soll nicht gesetzt werden.

Verfasst: 14.10.2018 16:45
von funkheld
Vielen Dank.
Es wird mir hier wunderbar geholfen.

Gruss