AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablen in Stringliteral inlinen

Ein Thema von QuickAndDirty · begonnen am 5. Feb 2020 · letzter Beitrag vom 11. Feb 2020
Antwort Antwort
Seite 4 von 4   « Erste     234
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
615 Beiträge
 
Delphi 10.3 Rio
 
#31

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 19:24
Nun Ich generiere delphi code für eine include datei...jetzt mit format('Bla%d blabla%s '[x,y])
Glaube mir die Ausgabe mit string interpolation hätte den Quellcode in den strings sicher leichter manipulierbar und umstellbar gemacht.
Ich sage ja nicht das es der Heilige Gral ist, frei von jedwedem Nachteil.

Dennoch hätte Stringinterpolation mir bei der Aufgabe echt was gebracht(leichte Umstellbarkeit des Codes in den Strings)
Das andere Übel ist die häßliche art und weise wie Einzelhochkomma escaped werden....
Sowohl QuotedString('TADA') als auch ''''''''''''''''''' sind keine sehr befriedigende Art sowas zu machen.
Auch ein Multiline String literal wäre schon schön für diese Aufgabe gewesen.
Schon mal was davon gehört, dass du deinen Platzhaltern in den Formatstrings Indexe verpassen kannst?

Format('Mein Name ist %0:s und ich stamme aus %1:s', ['Max', 'Musterhausen']);
Format('Ich stamme aus %1:s und mein Name ist %0:s', ['Max', 'Musterhausen']);

Grüße

TurboMagic
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
615 Beiträge
 
Delphi 10.3 Rio
 
#32

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 19:28
Übrigens solltet ihr nicht Write und Format verwechseln, die funktionieren unterschiedlich.
Jaaa...
Write nutzt Compiler Magic.
Das war zu Turbo Pascal Zeiten eine der häufigsten Fragen in den Newsgroups:
"Wie kann ich eine Funktion oder Prozedure schreiben die wie Write eine variable ANzahl Parameter übergeben bekommt?"

Antwort:
"Geht nicht. Write ist Compiler Magic"

Grüße

TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.261 Beiträge
 
Delphi 10.3 Rio
 
#33

AW: Variablen in Stringliteral inlinen

  Alt 7. Feb 2020, 19:31
Jo, leider nicht genug Infos, aber mehr, als man bei sowas wie printf rein bekommt (dort garkeine Typ-Info, außer dem Wert oder einen Zeiger auf die Variable) und noch nichtmal die Anzahl der Parameter ist bekannt.

Hatte mal versucht ein Format zu basteln, wo die Daten wie bei printf übergeben werden.

In Delphi kann man sowas leider auch nicht nativ schreiben, aber jedenfalls man eine Funktion ohne die Parameter schreiben, die als Export deklarieren und in der selben Datei wieder einen Import auf sich selber, der dann in der Definition diese offenen Parameter hat.
Aber leider bekommt man eben keinerlei Infos die übergebenen Werte.
Darum muß man dort auch selber im String das "genaue" Format angeben (nicht nur %d sondern auch ob Byte, Word, LongWord, ShortInt, SmallInt, LongInt usw.)

Also in der Hinsicht ist Format doch recht einfach, auch wenn teilweise echt blöd ist.
Ich kann nicht %p nehmen und dann ein Objekt oder Integer reingeben, der in der aktuellen Pointergröße (32 oder 64) ausgegeben wird.
Oder einen Integer mit Tausenderpunkten, den muß man erst in einen Fließkomma umwandeln (x/1) und kann dann %.0n verwenden. (k.A. warum man nicht direkt einen Integer als Float darstellen darf usw.)


Zitat:
Wie kann ich eine Funktion oder Prozedure schreiben die wie Write eine variable ANzahl Parameter übergeben bekommt
Wie gesagt, man kann soeine Funktion schreiben (besser in eine DLL legen, denn innerhalb einer EXE schreiben und benutzen ist ein grauß), aber die Funktion weiß nicht was ihr übergeben wurde und das müsste man dann zusätzlich noch als Info mit reingeben.

Über die RTTI kann man ansonsten nur noch nativ "beliebige" Funktionen aufrufen. (siehe Invoke in System.RTTI.pas)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 7. Feb 2020 um 19:35 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
407 Beiträge
 
Delphi 10.3 Rio
 
#34

AW: Variablen in Stringliteral inlinen

  Alt 9. Feb 2020, 22:35
Oder man nimmt offene variante Array-Parameter:

Delphi-Quellcode:
procedure WriteValues(Values: array of const);
begin
  Write(String.Join(String.Empty, Values));
end;

WriteValues(['hallo', 123]);
Dennis
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.548 Beiträge
 
Delphi 10.3 Rio
 
#35

AW: Variablen in Stringliteral inlinen

  Alt 10. Feb 2020, 12:46
Schon mal was davon gehört, dass du deinen Platzhaltern in den Formatstrings Indexe verpassen kannst?
Format('Mein Name ist %0:s und ich stamme aus %1:s', ['Max', 'Musterhausen']);
Format('Ich stamme aus %1:s und mein Name ist %0:s', ['Max', 'Musterhausen']);
Nein, bisher nicht. OK das ist schon mal ne gute Sache, ein bisschen TurboMagic quasi!
Ich denke ich werde das in meine Arbeitsweise aufnehmen.
Andreas
#PerfMatters

Geändert von QuickAndDirty (10. Feb 2020 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.353 Beiträge
 
Delphi 10.3 Rio
 
#36

AW: Variablen in Stringliteral inlinen

  Alt 10. Feb 2020, 13:07
Schon mal was davon gehört, dass du deinen Platzhaltern in den Formatstrings Indexe verpassen kannst?
#23
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
582 Beiträge
 
Delphi 2007 Professional
 
#37

AW: Variablen in Stringliteral inlinen

  Alt 10. Feb 2020, 14:10
Und woher soll write wissen, wie viele Nachkommastellen du willst? Wie viele führende Nullen?
Wenn man das explizit braucht, verwendet man halt %f statt %g. Und ansonsten funktionert %g bei Floats halt wie %f, auch da nimmt Format ja defaults.
Thomas Mueller
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
582 Beiträge
 
Delphi 2007 Professional
 
#38

AW: Variablen in Stringliteral inlinen

  Alt 10. Feb 2020, 14:13
Die Format-Funktion weiss ja, welcher Datentyp übergeben wurde, denn eigentlich ist das ja ein Variant mit entsprechenden Informationen.
Falsch! Es ist ein TVarRec - und die haben ebend nicht genügend Informationen über den Typen.
Doch, zumindest zu den Variablen, die Format standardmäßig unterstützt. Bei anderen hat man sowieso ein Problem.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.669 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#39

AW: Variablen in Stringliteral inlinen

  Alt 11. Feb 2020, 00:13
Doch, zumindest zu den Variablen, die Format standardmäßig unterstützt. Bei anderen hat man sowieso ein Problem.
TVarRec kennt nur 32 und 64bit Integer mit Vorzeichen und kennt kein TDateTime - Float nur als Extended oder Currency (da wär ja sogar Variant besser -.-)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.261 Beiträge
 
Delphi 10.3 Rio
 
#40

AW: Variablen in Stringliteral inlinen

  Alt 11. Feb 2020, 11:38
Und Variant kann man sogar nativ um neue Typen erweitern. (Delphi hat z.B. seine AnsiString und UnicodeString dort reingepackt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf