Komma ganz am Ende soll nicht gesetzt werden.

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

Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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
RSBasic
Admin
Beiträge: 7882
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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
[...]
BildBildBildBild BildBild
Benutzeravatar
Bisonte
Beiträge: 2387
Registriert: 01.04.2007 20:18

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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.
PureBasic 5.72 LTS (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 64GB RAM | iChill GeForce RTX 2080 Super | HAF XF Evo​​
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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
;...
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
juergenkulow
Beiträge: 146
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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 
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
funkheld
Beiträge: 612
Registriert: 31.12.2009 11:58

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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
Benutzeravatar
juergenkulow
Beiträge: 146
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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ß
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag 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")
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
funkheld
Beiträge: 612
Registriert: 31.12.2009 11:58

Re: Komma ganz am Ende soll nicht gesetzt werden.

Beitrag von funkheld »

Vielen Dank.
Es wird mir hier wunderbar geholfen.

Gruss
Antworten