AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variablen Interpolation in Delphi

Ein Thema von choose · begonnen am 9. Dez 2003 · letzter Beitrag vom 20. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#1

Variablen Interpolation in Delphi

  Alt 9. Dez 2003, 15:50
Gibt es neben Format und FormatDateTime in Delphi noch andere Möglichkeiten, Platzhalter in Strings (ggf mit Formatierung) durch den Wert von Variablen zu ersetzen?

Zwar bietet Format mithilfe von Indizes die Möglichkeit, gezielt einen Wert aus dem übergebenen Array anzusprechen, ich suche hingegen nach einer Möglichkeit, die Variablen namentlich zu referenzieren, ähnlich, wie es in diversen Skriptsprachen möglich ist:
Code:
foo= 6;
bar= 9;
myString= "What do you get if you multiply $foo by $bar?";
Idealerweise sollten die Platzhalter ein Typangabe sowie einen Defaultwert (und ggf eine Formatierungsbeschreibung) aufnehmen können, vielleicht etwas in der Art
myString:= AFunc('My number %ANumber:.6d|23 says %AString:s', SomeParams); oder auch die vollständige Auswertung von Teilausdrücken
myString:= AFunc('The anwswer ist $(6*9+ANumber:Integer|23)', SomeParams); Ich bin auf der Suche nach einer fertigen und praxiserprobten Lösung. Bittet postet deshalb keinen Vorschlag der Art "nutze Pos und Copy" oder "nutze reguläre Ausdrücke". Im Zweifelsfall werde ich letztere verwenden, um etwas ähnliches auf der Basis eines assozativen Arrays von Varianten umzusetzen...

Ich bin gespannt
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Variablen Interpolation in Delphi

  Alt 9. Dez 2003, 20:47
Ich muss mal so doof fragen, aber was ist an Format nicht gut? Die macht eigentlich recht genau das

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Variablen Interpolation in Delphi

  Alt 9. Dez 2003, 20:50
Zitat von choose:
ich suche hingegen nach einer Möglichkeit, die Variablen namentlich zu referenzieren, ähnlich, wie es in diversen Skriptsprachen möglich ist:
Nur ist Delphi dummerweise ein Compiler und kein Interpreter. Das einzige was dir der Compiler für die Variablen geben kann ist deren Adresse im Arbeitsspeicher.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Variablen Interpolation in Delphi

  Alt 9. Dez 2003, 21:23
Zitat von jbg:
Das einzige was dir der Compiler für die Variablen geben kann ist deren Adresse im Arbeitsspeicher.
Das ist mir bekannt. Obwohl man mithilfe der RTTI in der Lage wäre, zumindest die published Eigenschaften oder die Rückgabewerte von Methoden namentlich zu referenzieren, ist das in der Tat nicht praxistauglich. Aus diesem Grund muss diese Information vom Entwickler (zB beim Aufruf) hinzugefügt werden.


Zitat von sakura:
Ich muss mal so doof fragen, aber was ist an Format nicht gut?
Format ist leider "nur" in der Lage, die in einem Array übergebenen Variablen mithilfe deren jeweiliger Position zu referenzieren, also etwa in der Art
myString:= Format('A String: %2:s', [6, 9, '42']); Wie ich benötige ist aber etwas in der Art
Delphi-Quellcode:
myString:= AFunc('A String: %AString:s',
  [Value('Num1', 6), Value('Num2', 9), Value('AString', 42)]);

Aus dem Aufruf kann man schon entnehmen, dass ich mir ungefähr soetwas vorstelle:
Delphi-Quellcode:
type
  TMyValueTupel = record
    Ident: string;
    Value: Variant;
  end;

function AFunc(const AMessage: string;
  const AValues: array of TMyValueType): string;
Tatsächlich würde ich Value und AFunc wahrscheinlich als Klassenmethoden einer Klasse implementieren, die in der Lage ist, benannte Werte-Mengen (assoziatives Array) und neben einfachen Tupeln auch Arrays aus Werten zu speichernn, so dass eine erweiterte Format-Syntax der Art
Code:
'An array entry: $AnArray[2]:s'
oder gar
Code:
'An array entry: $AnArray[$Num1]:s'
denkbar ist.
Im Wesentlichen entspricht dies etwas der Collection TParams aus der Unit DB mit den zugehörigen Items TParam, allerdings ist mir das zu SQL-spezifisch, bietet nicht ausreichend Funktionalität (zB Default-Values) und ist zu kompliziert in der Handhabe...

Trotzdem möchte ich die Mühe ungern investieren, falls es eine entsprechende Lösung bereits gibt
gruß, choose
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Variablen Interpolation in Delphi

  Alt 9. Dez 2003, 22:59
Wenn ich dich richtig verstanden habe, willst du Variablen in einem String anhand ihres Namen finden und ersetzen???
Also wie bei SQL-Variablen " SQL := 'SELECT X FROM Y WHERE Z = :VAR;'"...

Ein Lösungsweg dafür wäre eine kontextfreie Grammatik wie BNF.
Schau mal auf die Seite und saug' dir die Compos (Freeware).
Mit dem TParserAll bastel ich rum, falls ich endlich mal Zeit dazu finde.

Die Grammatik würde so aussehen (BNF-Property des TParserAll):
Delphi-Quellcode:
<letter> ::= a..z<letter>|a..z
<digit> ::= 0..9
<underline> ::= '_'<underline>|'_'
<dollar> ::= '$'<dollar>|'$'
<number> ::= <digit><number>|<digit>
<spec> ::= <number><spec>|<underline><spec>|<dollar><spec>|
                  <number>|<underline>|<dollar>
<id_body> ::= <letter><spec><id_body>|<letter><id_body>|
                  <letter><spec>|<letter>
<identifier> ::= ':'<id_body><identifier> |':'<id_body>
Damit findest du alle Variablen, die mit einem ":" beginnen incl. Start- & Endposition.


Ich hoffe ich konnte dir damit weiterhelfen.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Variablen Interpolation in Delphi

  Alt 10. Dez 2003, 09:56
Hallo GeorgeWNewbie,

der Einsatz einer kontextfreien Grammatik scheint mir für das blose Auffinden der Textpassagen etwas übertrieben, der reguläre Ausdruck für die von mir oben beschriebene Syntax inkl Arrays mit Zahlen als Indizes lautet schlicht
Code:
\$(\w+)(\[(\d+)\])?
und kann dank eines Wrappers mit Referenzzählung in einer einfachen Schleife der Form
Delphi-Quellcode:
with RegExp('\$(\w+)(\[(\d+)\])?') do
  if Execute(AnInput) do
  repeat
    DoSthWidth(AnInput, MatchPos[0], MatchLen[0]);
  until not ExecuteNext;
angewendet werden...

Das Problem mit den benannten Identifiern ist damit aber nach wie vor nicht gelöst. Ich müsste einen entsprechenden Container selbst verwalten (zuvor jedoch eine geeignete Lösung zur Erzeugung dieser Information erarbeiten), die Bezeichnungen parsen...

Trotzdem, Danke! Wenn Du Dich für Grammatiken und Parsern für Delphi interssierst, ist vielleicht der GOLD parser eine gute Lösung...
gruß, choose
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Variablen Interpolation in Delphi

  Alt 20. Dez 2004, 12:42
Gibt es hier seit D2005 eine Veränderung oder steht lediglich System.String.Format als zusätzliche Möglichkeit der Stringformatierung zur Verfügung?
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#8

Re: Variablen Interpolation in Delphi

  Alt 20. Dez 2004, 13:01
Zitat von choose:
Gibt es hier seit D2005 eine Veränderung oder steht lediglich System.String.Format als zusätzliche Möglichkeit der Stringformatierung zur Verfügung?
Ich verstehe dein Problem nicht. Du weißt doch wie das Ergebnis aussehen soll. Also machst du das, was ein Programmierer so macht... Und schreibst dir selber eine Funktion.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Variablen Interpolation in Delphi

  Alt 20. Dez 2004, 15:27
Hallo Sprint,

Zitat von Sprint:
[..]schreib[st] dir selber eine Funktion
Das ist mit Sicherheit möglich, aber ich befürchte, dass ich bei meinem Entwurf Fehler wiederholen würde, die bei über Jahren etablierten Systemen bereits der Vergangenheit angehören. Abgesehen von einfachen Implementierungsfehlern mute ich mir hier Designschwächen in puncto Robustheit, Vorhersagbarkeit des Parsingergebnisses, Erweiterbarkeit und nicht zu letzt Probleme in der Akzeptanz anderer Entwickler mit anderen Anforderungen, zu.
Zieht man darüber hinaus den zeitlichen Aufwand in Betracht, lässt sich meine Präferenz einer ausgereiften vorhanden Lösung verstehen, nicht wahr
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#10

Re: Variablen Interpolation in Delphi

  Alt 20. Dez 2004, 19:48
Zitat von choose:
Zieht man darüber hinaus den zeitlichen Aufwand in Betracht [...]
Am 09.12. hast du diesen Thread gestartet. Hätte ich jeden Tag nur zwei Stunden Zeit um zu programmieren, dann wäre es schon fertig.

Liegt vielleicht daran, das ich ein praktisch denkender Mensch bin.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:11 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