AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Besserer und einfacherer Format-Befehl (OpenSource)
Thema durchsuchen
Ansicht
Themen-Optionen

Besserer und einfacherer Format-Befehl (OpenSource)

Ein Thema von VoSs2o0o · begonnen am 23. Jan 2024 · letzter Beitrag vom 30. Jan 2024
Antwort Antwort
VoSs2o0o
Registriert seit: 23. Jan 2024
Ich habe mir mal die Mühe gemacht eine Lib zu entwickeln, welche der String-Interpolation schon recht nahe kommt:

Delphi-Quellcode:
NetFormat.ToString('Hello, {0}! Today is {1:ddd}, it's {1:HH:mm} now.', name, date);

// Hello, Mark! Today is Wednesday, it
's 19:40 now.
Die Variablen werden automatisch erkannt und konvertiert (automatischer Typrückschluß via Generics), so ist es nicht erforderlich IntToStr, FloatToStrF usw zu verwenden.


Hier nochmal eine Kurzerklärung zum Format. grundsätzlich orientieren sich die Spezifizierer für das Format an .Net. Deshalb weicht das Datumsformat etwas, der Rest deutlicher ab. Ich halte das aber für intuitiver als die sprintf-Konvention die Delphi übernommen hat:

Delphi-Quellcode:
// Integer werden automatisch als Fließkomma und Fließkomma als Integer formatiert, sofern erforderlich.
// C für Währung (Zahl gibt Nachkomma an)
// D für Ganzzahl (Zahl gibt führende Nullen an)
// F für Fließkomma (Zahl gibt Nachkomma an)
//
// Datum kann:
// dd = Tag, MM=Monat, yyyy=Jahr
// HH=Stunde, mm=Minute, ss=Sekunde
// es gibt weitere Möglichkeiten Siehe readme.
Hier das Repo/Download hierzu:
https://github.com/VoSs2o0o/NetFormat

Ich habe außerdem auf meine Webseite einen Artikel verfasst, wie es funktioniert und wie es aufgebaut ist:
https://www.cloud-9.de/entwicklung/d...-format-befehl
Die readme ist im Projekt:
https://github.com/VoSs2o0o/NetForma...ster/readme.md

Ich freue mich über eure Rückmeldungen, und vielleicht hilft es ja dem einen oder anderen weiter

Geändert von VoSs2o0o (26. Jan 2024 um 23:35 Uhr) Grund: Beschreibung ergänzt
 
VoSs2o0o
 
#2
  Alt 25. Jan 2024, 22:35
Und noch eine Neuigkeit heute:

Ich hab gleich mal die Version 2.0 Released:

ALt:
Delphi-Quellcode:
NetFormat.ToString('Hallo {0} {1:D4} {2} {3}',
                   'Welt', 55, 7.7, testdate);
Neu:
Delphi-Quellcode:
TStr('Hallo {0} {1:D4} {2} {3}').
    Params('Welt', 55, 7.7, testdate);
Das neue Format ist eleganter und auch ein wenig kürzer. Es handelt sich um eine Record-Erzeugung durch einen überladenen Explizit-Operator. Hinten dran dann die Parameter als Methode.

Readme:https://github.com/VoSs2o0o/NetForma...ster/readme.md
Webseite:https://www.cloud-9.de/entwicklung/d...-format-befehl
Code: https://github.com/VoSs2o0o/NetFormat/
Download: https://github.com/VoSs2o0o/NetFormat/releases
  Mit Zitat antworten Zitat
TBx

 
Delphi 12 Athens
 
#3
  Alt 26. Jan 2024, 14:34
Moin, ich habe das Thema verschoben und bereinigt.
Thomas Breitkreuz
  Mit Zitat antworten Zitat
TurboMagic

 
Delphi 12 Athens
 
#4
  Alt 27. Jan 2024, 13:56
Wenn GetIt wieder funktioniert, könntest du's auch dadrüber publizieren.
Ist gar nicht schwer...
  Mit Zitat antworten Zitat
VoSs2o0o
 
#5
  Alt 30. Jan 2024, 01:01
Ja, werde ich mir mal anschauen.

Ich habe noch eine neue Version, aufgrund von Tipps aus dem englischen Forum erstellt.
Dabei ist mir aufgefallen, das ich nicht zuverlässig nil mit generischen Typen erkennen kann. Ich habe bereits folgendes getestet:

Delphi-Quellcode:
default(T) == nil //kompiliert nicht
T(nil) == nil //kompiliert nicht
PPointer(@val1)^ <> nil // funktioniert, aber nicht mit DunitX, bei float ist der Pointer nil

//in Moment verwende ich folgenden Workaround:
GetTypekind(T) == tkPointer
//...würde aber auch Pointer ausschließen, und ist auch nicht "sauber". Aber in Moment ist 'nil' das einzige was darauf anspricht, da ich Pointer nicht unterstütze.
### 28.01.2024: Version 3.0
- Old:
Delphi-Quellcode:
TStr('Hallo {0} {1:D4} {2} {3}').
     Params('Welt', 55, 7.7, testdate);
- New: TStr -> FStr, and old Format readded, beause some People wants a more
Delphi-Format like command:
Delphi-Quellcode:
FStr('Hallo {0} {1:D4} {2} {3}').
               Params('Welt', 55, 7.7, testdate);
TNetFormat.TStr('Hallo {0} {1:D4} {2} {3}',
               'Welt', 55, 7.7, testdate);
- Namespace VTools added to avoid conficts
- Hex-Format added ("X")
- TFormatStettings Support
- Tests added
- 'writeln' to Example added, to also have an console output
- some minors changes to README


Readme: https://github.com/VoSs2o0o/NetForma...ster/README.md
Code: https://github.com/VoSs2o0o/NetFormat/
Download: https://github.com/VoSs2o0o/NetFormat/releases
Webseite: https://www.cloud-9.de/entwicklung/d...-format-befehl

Geändert von VoSs2o0o (30. Jan 2024 um 01:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz