Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Besserer und einfacherer Format-Befehl (OpenSource) (https://www.delphipraxis.net/214518-besserer-und-einfacherer-format-befehl-opensource.html)

VoSs2o0o 23. Jan 2024 17:40


Besserer und einfacherer Format-Befehl (OpenSource)
 
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 :-)

VoSs2o0o 25. Jan 2024 22:35

AW: Besserer Format-Befehl
 
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

TBx 26. Jan 2024 14:34

AW: Besserer Format-Befehl
 
Moin, ich habe das Thema verschoben und bereinigt.

TurboMagic 27. Jan 2024 13:56

AW: Besserer und einfacherer Format-Befehl (OpenSource)
 
Wenn GetIt wieder funktioniert, könntest du's auch dadrüber publizieren.
Ist gar nicht schwer...

VoSs2o0o 30. Jan 2024 01:01

AW: Besserer und einfacherer Format-Befehl (OpenSource)
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 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