Seite 3 von 3

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 20.01.2010 14:42
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:

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 20.01.2010 15:20
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 ..

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 20.01.2010 16:16
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:

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 20.01.2010 17:10
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)  ;

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 20.01.2010 19:33
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