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
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Formatfunktion ähnlich wie sprintf (C)

Beitrag 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:
Zuletzt geändert von mk-soft am 25.03.2012 16:44, insgesamt 11-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Update v1.01

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Update v1.07

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Danke Danke

FF <)
Win11 x64 | PB 6.20
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

Geniale Funktion!
Danke dafür
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag 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 ;)
"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
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag 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
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag 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%%".
"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
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag 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
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Formatfunktion ähnlich wie sprintf (C)

Beitrag 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
Zuletzt geändert von helpy am 19.01.2010 16:09, insgesamt 1-mal geändert.
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Antworten