PureBoard
https://www.purebasic.fr/german/

Komma ganz am Ende soll nicht gesetzt werden.
https://www.purebasic.fr/german/viewtopic.php?f=3&t=31124
Seite 1 von 1

Autor:  funkheld [ 14.10.2018 10:51 ]
Betreff des Beitrags:  Komma ganz am Ende soll nicht gesetzt werden.

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:
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

Autor:  RSBasic [ 14.10.2018 11:00 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

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:
[...]
zahl=ReadByte(0)
if Eof(0)
  WriteString (1,"$"+RSet(Hex(zahl), 2, "0"))
else
  WriteString (1,"$"+RSet(Hex(zahl), 2, "0") +", ")
endif
[...]

Autor:  Bisonte [ 14.10.2018 12:08 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

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.

Autor:  ccode_new [ 14.10.2018 12:11 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

Eine sinnvolle Herangehensweise wäre z.B solch eine ähnliche Überprüfung:

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

Autor:  juergenkulow [ 14.10.2018 13:55 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

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:
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

Autor:  funkheld [ 14.10.2018 15:24 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

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

Autor:  juergenkulow [ 14.10.2018 16:09 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

Hallo,

2. Versuch:

Code:
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ß

Autor:  ccode_new [ 14.10.2018 16:20 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

Meine Lösung:

Code:
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")

Autor:  funkheld [ 14.10.2018 16:45 ]
Betreff des Beitrags:  Re: Komma ganz am Ende soll nicht gesetzt werden.

Vielen Dank.
Es wird mir hier wunderbar geholfen.

Gruss

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/