| Autor |
Beitrag |
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Fr 03.04.09 14:50
Hallo,
ich möchte einen Text möglichst flexibel gestalten. Dazu soll der erste Teil der Formatanweisung geändert werden. Da es nur ein String ist, sind Änderungen kein Problem. Die übergebenen Argumente sind in einem Konstanten Array. Und da ist mein Problem. Wie übergebe ich das Array möglichst flexibel. (dh. Änderung der Anzahl u. Werte der Parameter).
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var x,y: String; begin x:= 'Text'; y:= 'länger'; label1.Caption:= format('Hier steht ein %s der auch %s sein kann.',[x,y]); end; | Moderiert von Narses: Topic aus Open Source Projekte verschoben am Fr 03.04.2009 um 15:33
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 03.04.09 15:02
Der Trick besteht bei Formatstrings darin, nicht die Parameter-Reihenfolge zu ändern, sondern dem Format-String zu sagen, dass die Argumente in einer anderen Reihenfolge wie übergeben genutzt werden müssen.
Siehe dazu auch die Beschreibung von Formatstrings und den zusätzlichen Modifiern. '%1:s' dürfte für dich interessant sein ....
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Fr 03.04.09 15:19
Das war schon hilfreich. Somit ändert sich die Reihenfolge der Parameter. Und wie definiere ich dazu ein variables Konstanten Array? (Das ist eigentlich schon ein Widerspruch) um die Anzahl der Parameter zu ändern? Bzw. gibt es eine bessere Lösung?
Ich könnte natürlich auch Variable und Konstante umdrehen.....
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Fr 03.04.09 15:28
Du kannst Format ein DYNAMISCHES ARRAY übergeben:
Delphi-Quelltext 1:
| var DynamnicArray: array of String; |
Und mit SetLength kannst du die Länge des Strings setzen. 
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 03.04.09 15:42
Du kannst dem Format ein array of const (= array of TVarRec) übergeben, dieses Array kannst du dynamisch zur Laufzeit zusammensetzen wie du willst.
Zuletzt bearbeitet von delfiphan am Fr 03.04.09 15:43, insgesamt 1-mal bearbeitet
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Fr 03.04.09 15:43
Ein dynamisches Array kann aber nur als erster Parameter übergeben werden. Oder?
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 03.04.09 15:44
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Fr 03.04.09 15:58
Danke. Mit dem Code müsste es funktionieren.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 03.04.09 17:30
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|