Aktuelle Zeit: 02.12.2020 17:59

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 10:51 
Offline

Registriert: 31.12.2009 11:58
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 11:00 
Offline
Admin

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
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
[...]

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 12:08 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
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​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 12:11 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
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
;...

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 13:55 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
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

_________________
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 15:24 
Offline

Registriert: 31.12.2009 11:58
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 16:09 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
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ß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 16:20 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
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")

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Komma ganz am Ende soll nicht gesetzt werden.
BeitragVerfasst: 14.10.2018 16:45 
Offline

Registriert: 31.12.2009 11:58
Vielen Dank.
Es wird mir hier wunderbar geholfen.

Gruss


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye