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

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

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

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]

...
siehe meine nächste Antwort
cu, helpy