Seite 1 von 3

Formatfunktion ähnlich wie sprintf (C)

Verfasst: 13.04.2008 23:23
von mk-soft
War irgendwo mal wieder ein Anfrage für eine C Funktion in PB zu übernehmen.

Muss ja nicht gleich importiert werden. Hier mal ein Anfang zum ausbauen.
Alle Variablen ByRef übergeben. Variablentypen nach PB Syntax. Fehlt aber noch einiges.

Update v2.0 Beta

Mal alles Überarbeitet. Bitte testen
Bei Hexzahlen wird jetzt mit den zweiten Wert der Type an gegeben. "%x[Breite].[Type]"
Type 2=Byte, 4=Word, 8=Long, 16=Quad

Update v2.01

Anpassung an der Formatierung

Update v2.02
- Bugfix: Hexwert lesen aus Parameter

Update v2.03
- Bugfix: Typeangabe Hexwert lesen

Update v2.05
- Code optimiert. Vielen Dank an peterb
- Added Character


http://www.purebasic.fr/english/viewtop ... 12&t=32026

Code: Alles auswählen

; Link: http://www.purebasic.fr/english/viewtopic.php?f=12&t=32026
FF :wink:

Verfasst: 19.04.2008 21:45
von mk-soft
Update v1.01

FF :wink:

Verfasst: 11.05.2009 18:01
von mk-soft
Update v1.07

FF :wink:

Verfasst: 12.05.2009 16:18
von Andesdaf
Danke Danke

FF <)

Verfasst: 13.05.2009 03:00
von nicolaus
Geniale Funktion!
Danke dafür

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 19.01.2010 13:26
von c4s
Sehr gut - sollte meiner Meinung nach fest eingebaut werden!

Gibt es dazu noch eine klitzekleine Hilfe für welche wie mich, die bisher nur "\n" und "\r" kannten?
Edit: Ich stelle gerade fest, dass ich auch einfach mal sprintf() genauer anschauen sollte ;)

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 19.01.2010 13:33
von WPö
Hallo!

Code: Alles auswählen

  result = ReplaceString(result, "\\", Chr(255))
  
  result = ReplaceString(result, "\n", #LF$)
  result = ReplaceString(result, "\r", #CR$)
  result = ReplaceString(result, "\t", #HT$)
  result = ReplaceString(result, "\v", #VT$)
  result = ReplaceString(result, "\'", #DQUOTE$)
  result = ReplaceString(result, "\a", #BEL$)
  result = ReplaceString(result, "\b", #BS$)
  result = ReplaceString(result, "\f", #FF$)
  
  result = ReplaceString(result, Chr(255), "\")
\n ist der Zeilenvorschub
\r Wagenrücklauf
\t Tabulator
\v vertikaler Tabulator (extrem selten anzutreffen)
\' einfache engl. An-/Abführung
\a Alarmton
\b Rückschritt
\f Seitenvorschub
\\ einfacher Rückwärtsschrägstrich

Reicht das?

Gruß - WPo

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 19.01.2010 14:58
von c4s
Danke erstmal.
Es ging mir aber mehr um die erweiterten Befehle, die im Beispiel benutzt werden, wie "%-20s" (kann es sein, dass "-" nicht korrekt funktioniert?) oder "%8.2f%%".

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 19.01.2010 15:16
von WPö
Ah so. Funktion habe ich nicht geprüft. Eine Erklärung der einzelnen Teile einer Formatieranweisung kann man in jedem einfachen C-Programmierbuch nachlesen. Auch an C angelehnte Sprachen haben meist so eine Funktion, z.B. PHP.
Auf die Schnelle habe ich das gefunden:
http://de.php.net/manual/de/function.sprintf.php
Besonders Beispiel Nr. 6 zeigt einige Möglichkeiten der Zeichenkettenformatierung auf. Mußt Dich halt mal durchwursteln, vielleicht in Wikipedia oder WikiBooks.

Gruß - WPo

Re: Formatfunktion ähnlich wie sprintf (C)

Verfasst: 19.01.2010 15:45
von helpy
WPo hat geschrieben:Hallo!

Code: Alles auswählen

  result = ReplaceString(result, "\\", Chr(255))
  
  result = ReplaceString(result, "\n", #LF$)

...
  
  result = ReplaceString(result, Chr(255), "\")
[FALSCH]
So einfach geht das nun auch wieder nicht !!!

Beispiel String: "einiges an text \\n und noch mehr text"

Das wird durch die ReplaceString Befehle zu: "einiges an text " + #LF$ + " und noch mehr text"

Da zuerst "\\" mit "\" und danach "\n" mit #LF$ ersetzt wird.

Korrekt wäre aber folgendes Ergebnis: "einiges an text \n und noch mehr text"

D.h. Man muss den String in jedem Fall von links nach rechts parsen! ... und das nur EINmal !
[/FALSCH]

:oops: :oops: :oops: ... siehe meine nächste Antwort

cu, helpy