Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi (String-) Format - variable Anzahl an Paramern (dynamisch!) (https://www.delphipraxis.net/156973-string-format-variable-anzahl-paramern-dynamisch.html)

ralfiii 22. Dez 2010 16:58

Delphi-Version: 2010

(String-) Format - variable Anzahl an Paramern (dynamisch!)
 
Vielleicht ist das jetzt Deppen-einfach und ich steh einfach nur auf'm Schlauch.

Normales Format-Strings-Usage:
Delphi-Quellcode:
   Memo1.Lines.Add(Format('Test %s %s', ['eins', 'zwei']));

Nur was wenn die Anzahl der Parameter erst zur Laufzeit feststeht?

Wie erzeuge ich das array of Const das die Format-funktion so gerne hätte?
Das geht z.B. nicht:
Delphi-Quellcode:
var x : array of string;
begin
   setlength(x,2);
   x[0]:='Test';
   x[1]:='tritz';
   Memo1.Lines.Add(Format('Test %s %s', x));
Der Vorlagen-String würd natürlich sinnvoller weise auch erst zur Laufzeit generiert werden, aber das schaff ich grad noch selber :-)

Thx!
Ralf

Deep-Sea 22. Dez 2010 17:01

AW: (String-) Format - variable Anzahl an Paramern (dynamisch!)
 
Ein Array of Const ist doch ein Array of Variant, oder?! :gruebel:

ralfiii 22. Dez 2010 23:56

AW: (String-) Format - variable Anzahl an Paramern (dynamisch!)
 
Zitat:

Zitat von Deep-Sea (Beitrag 1070006)
Ein Array of Const ist doch ein Array of Variant, oder?! :gruebel:

Stimmt.
Aber das Array als Variantenarray zu deklarieren hilft in dem Fall leider auch nicht.

Bummi 23. Dez 2010 00:10

AW: (String-) Format - variable Anzahl an Paramern (dynamisch!)
 
http://rvelthuis.de/articles/articles-openarr.html

>> Internals

ralfiii 23. Dez 2010 10:19

AW: (String-) Format - variable Anzahl an Paramern (dynamisch!)
 
Zitat:

Zitat von Bummi (Beitrag 1070071)

Super, danke.

Wen's interessiert:
Delphi-Quellcode:
type
  TConstArray = array of TVarRec;

procedure FinalizeVarRec(var Item: TVarRec);
begin
  case Item.VType of
    vtUnicodeString: UnicodeString(Item.VUnicodeString):='';
  else
    raise Exception.Create('type not handled properly');
  end;
  Item.VInteger := 0;
end;
procedure FinalizeVarRecArray(var Arr: TConstArray);
var
  I: Integer;
begin
  for I := Low(Arr) to High(Arr) do
    FinalizeVarRec(Arr[I]);
  Arr := nil;
end;

procedure TForm1.butLoadClick(Sender: TObject);
var
  x : TConstArray;
  i: Integer;
begin
   setlength(x,2);
   for i:=0 to High(x) do
   begin
        x[i].VType:=vtUnicodeString;
        x[i].VUnicodeString:=nil;
        UnicodeString(x[i].VUnicodeString):=IntToStr(i);
   end;
   Memo1.Lines.Add(Format('Test %s %s', x));
   FinalizeVarRecArray(x);
end;


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