Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi String's zusammenfügen mit Trennzeichen falls String nicht leer (https://www.delphipraxis.net/161921-strings-zusammenfuegen-mit-trennzeichen-falls-string-nicht-leer.html)

RedOne 27. Jul 2011 13:16

String's zusammenfügen mit Trennzeichen falls String nicht leer
 
Titel sagt schon alles, oder nicht? ;-)

Es muss doch solch eine Funktion geben...
Ich habe verschiedene Strings die ich zu einem String zusammenführen möchte und zwar wie folgt:
"Kontakt: Vorname Name, TelG, Tel, Mobil"
z.b.: "Kontakt: Peter Müller, 0800800800, 0900900900, 0815885522
Nur kann jeder dieser Werte auch leer sein und ich hätte ein Komma oder Leerschlag zuviel. Klar kann ich jetzt mühsam jeden String auf seine Existenz prüfen (sein oder nicht sein, das ist die Frage!) aber irgendwie bin ich dazu zu faul :)
Bei einem Framework gab es eine Funktion in der man ein Template und die verschiedenen Strings übergeben konnte:
Delphi-Quellcode:
template:= "Kontakt: {[Vorname] }[Nachname]{, [TelG]}{, [TelP]}{, [Mobile]}";
LabelBla.Caption:= FormatString( template, [ Vorname, Nachname, TelG, TelP, Mobile ]);
Die eckigen Klammern [] sind die Feldnamen. Der Inhalt der Geschwungenen {} wird nur angezeigt, wenn mindestens ein Wert darin vorhanden ist. Also: {, [Name]} wird nur ausgegeben, wenn ein Name vorhanden ist, ansonsten fällt das Komma weg.

Langer Rede kurzer Sinn: Irgend so etwas suche ich :-)
Gibt es sowas?

Thanks!

stahli 27. Jul 2011 13:22

AW: String's zusammenfügen mit Trennzeichen falls String nicht leer
 
Du kannst auch alternativ nachträglich mit ReplaceString alle ',,' mit ',' ersetzen.

himitsu 27. Jul 2011 13:23

AW: String's zusammenfügen mit Trennzeichen falls String nicht leer
 
Ich wüßte jetzt nicht, wo es soetwas "Spezielles" schon fertig gibt, außer dort, wo es sich jemand, für sich selbst, in einem seiner Projekte, selbst gebaut hat.


Das Einfachste wäre das Ganze ganz "billig" als Funktion, mit ein paar IFs, zusammenzubauen.

In Delphi gibt es hier
Delphi-Quellcode:
FormatString( template, [ Vorname, Nachname, TelG, TelP, Mobile ]);
keine Möglichkeit, um an den Namen der übergebenen Variablen ranzukommen, um darüber dann die Stelle zu suchen, welche mit deren wert ersetzt werden soll.
Du müßtest also, für eine "allgemeine" Funktion immer den Namen und den Wert als Paar übergeben,
wogegen eine selbstgebastelte Funktion dann natürlich einfacher zu Handhaben wäre, wo die Parameter dann auch nicht als Array übergeben werden.
(ohne Array isses einfacher für das CodeInsight und die Autovervollständigung)

mleyen 27. Jul 2011 13:23

AW: String's zusammenfügen mit Trennzeichen falls String nicht leer
 
KA ob es was vorgefertiges gibt, aber lange Rede kurz gecoded:
Delphi-Quellcode:
function Combine(const Astr1, Astr2, Delim: string): string;
begin
  if (Astr1 = '') or (Astr2 = '') then
    Result := Astr1 + Astr2
  else
    Result := Astr1 + Delim + Astr2;
end;

DeddyH 27. Jul 2011 13:43

AW: String's zusammenfügen mit Trennzeichen falls String nicht leer
 
Meine Idee ist etwas aufwändiger:
Delphi-Quellcode:
function CSVLine(const Values: array of string; const Delimiter: string = ', ';
  BlanksAllowed: Boolean = false): string;
const
  FormatStr = '%s%s';
var
  i: integer;
  Value: string;
begin
  Result := '';
  for I := Low(Values) to High(Values) do
    begin
      Value := Values[i];
      if not BlanksAllowed then
        Value := trim(Value);
      if Value <> '' then
        Result := Result + Format(FormatStr, [Value, Delimiter]);
    end;
  if Result <> '' then
    SetLength(Result, Length(Result) - Length(Delimiter));
end;


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