Formatfunktion ähnlich wie sprintf (C)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag von edel »

mk-soft hat geschrieben: sprintf(...) arbeitet mit dynamischen Parameteranzahl. Ist glaube es ist ich nicht so einfach zu importieren.
Das so zu importieren ist ueberhaupt nicht moeglich. Man kann aber bei dem Import einmal das ABC (*A=0...) durchgehen. :wink:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag von STARGÅTE »

@mk-soft

Vllt kannst du ja mein Macro benutzen : DimP()

Es liefert zwar auch nicht unbegrenzt Parameter, aber immer hin 16, und es wäre ausbaufähig.
Außerdem kann man Strings direkt übergeben und nicht als Pointer ... Außer du willst weiterhin Pointer nutzen:

Hier mal n ganz einfaches Beispiel ...

Code: Alles auswählen

; Meine Macros ...
Macro _O_ : ( : EndMacro
Macro _C_ : ) : EndMacro
Macro MacroRepeat2(F,B)
  F#0#B,F#1#B,F#2#B,F#3#B,F#4#B,F#5#B,F#6#B,F#7#B, F#8#B,F#9#B,F#10#B,F#11#B,F#12#B,F#13#B,F#14#B,F#15#B
EndMacro
Macro MacroRepeat3(F,M,B)
  F#0#M#0#B:F#1#M#1#B:F#2#M#2#B:F#3#M#3#B:F#4#M#4#B:F#5#M#5#B:F#6#M#6#B:F#7#M#7#B:F#8#M#8#B: F#9#M#9#B:F#10#M#10#B:F#11#M#11#B:F#12#M#12#B:F#13#M#13#B:F#14#M#14#B:F#15#M#15#B
EndMacro
Macro DimP(Parameter, DefaultValue)
  MacroRepeat2(Nr,_#Parameter=DefaultValue) )
  Dim Parameter(15)
  MacroRepeat3(Parameter# _O_, _C_ =Nr, _#Parameter)
  Defined(0,0 
EndMacro
; -------------

; Definition der Procedure:

Procedure.s Format(MainString.s, DimP(String.s,""))
  Protected n = 0
  While String(n)
    MainString = ReplaceString(MainString, "%"+Str(n+1), String(n))
    n + 1
  Wend
  ProcedureReturn MainString
EndProcedure

Debug Format("%1 hier %3 %2 mega %4 ", "Das","ja", "ist", "cool")
EDIT: aber leider kann man hier die ParameterTypen nicht mischen, hat sich also erledigt ..
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag von mk-soft »

Update v2.01

Sollte jetzt alles stimmen. Die Ausgabe wird nicht mehr abgeschnitten wenn diese größer ist als die angegebene Breite.
Bei Hexzahlen wird jetzt der Type der Variable mit angegeben.

Könnt ja mal schauen was man noch verbessern oder erweitern kann.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag von c4s »

Nun ist mir doch noch etwas bei den Hex-Befehlen aufgefallen. Hier mein Test:

Code: Alles auswählen

name.s = "Michael Schulze"
Debug Format("%'#-25.9s", @name) ;linksbündig, abschneiden nach 9. Stelle, Auffüllung mit '#' auf 25 Stellen


value.l = $1FE0
Debug Format("%X", @value)        ;normal (Fehler wegen Auffüllung auf 8 Stellen mit '0'?)
Debug Format("%12X", @value)      ;Auffüllen auf 12 Stellen
Debug Format("%'#12X", @value)    ;Auffüllung mit '#' auf 12 Stellen
Debug Format("%'#12.12X", @value) ;Fehler
Debug Format("%'#12.7X", @value)  ;Fehler
Debug Format("%'#12.4X", @value)  ;
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag von mk-soft »

Update v2.02
- Bugfix: Hexwert lesen aus Parameter
Sorry

Update v2.02
- Bugfix: Typeangabe Hexwert lesen

Siehe beispiel für Hexwerte

FF :wink:

P.S. Beispiel

Code: Alles auswählen

IncludeFile "Format.pb"

valuelong.l = $12341FE0
valueword.w = $EEEE
valueinteger.i = $12345

Debug Format("%X", @valueinteger) ; Fehler
Debug Format("%12.8X", @valuelong) ; Breite 12, Type Long
Debug Format("%'#12.8X", @valuelong) ; Auffüllung mit '#' ; Breite 12, Type Long
Debug Format("%4X", @valueword) ; Ohne Breite ist Type ; Type Word
Debug Format("%8X", @valuelong)  ; Ohne Breite ist Type ; Type Long
Debug Format("%'#12.4X", @valueword)  ; Auffüllung mit '#' ; Breite 12, Type Word
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten