Komma ganz am Ende soll nicht gesetzt werden.

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 636
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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
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
[...]
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Bisonte
Beiträge: 2427
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 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
ccode_new
Beiträge: 1214
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: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
juergenkulow
Beiträge: 188
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: 636
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: 188
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: 1214
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: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
funkheld
Beiträge: 636
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