![]() |
Explode-Funktion erweitern, um "a b c" zu ignorieren
Ich benutze seit langer zeit diesen Code. Ich bevorzuge es mit Explode() zu wrappen. Nur deswegen dieser für manche umständliche Aufruf.
Darum gehts aber nicht.
Delphi-Quellcode:
function Explode(const Delimiter, Str: string): TArray<string>;
begin SetLength(Result, 0); Result := Str.Split([Delimiter]); end; Kann man Split() irgendwie dazu nutzen, damit in " gesetzte Wörter nicht getrennt werden?
Delphi-Quellcode:
a b c d
// ergibt ein Array mit Länge 4
Delphi-Quellcode:
a "b c" d
// soll ein Array mit Länge 3 ergeben |
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Klar:
Delphi-Quellcode:
Result := Str.Split([Delimiter], '"'); |
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Wie kann ich daraus denn 2 überladene Funktionen machen, ohne einen Compilerfehler zu bekommen?
Delphi-Quellcode:
In der oberen Explode steht noch etwas mehr drin, weswegen ich diese natürlich am Ende von allen überladenen Funktionen auch aufrufen möchte
function Explode(const Delimiter, Str: string; QuoteChar: Char): TArray<string>;
begin SetLength(Result, 0); Result := Str.Split([Delimiter], QuoteChar); end; function Explode(const Delimiter, Str: string): TArray<string>; begin Result := Explode(Delimiter, Str, ''); // compilerfehler hier, wenn '' dort steht. end; |
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Man kann eben einen Leerstring nicht als Zeichen übergeben, es muss schon ein Zeichen sein.
|
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Dann habe ich da ein kleines Designproblem was die überladenen Funktionen angeht.
|
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Na so in etwa:
Delphi-Quellcode:
Man kann die gequotete Version von Split nicht verwenden, wenn man keine Quotes hat. Deswegen gibt es da halt verschiedene Überladungen.
function Explode(const Delimiter, Str: string; QuoteChar: Char): TArray<string>; overload;
begin Result := Str.Split([Delimiter], QuoteChar); end; function Explode(const Delimiter, Str: string): TArray<string>; overload; begin Result := Str.Split([Delimiter]); end; |
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Zitat:
Delphi-Quellcode:
Funktioniert auch soweit
function Base(const aArray: TArray<string>): TArray<string>;
begin Result := mach-was-mit-aArray; // keine sorge, gehört alles zum eigentlichen Explode-Algorithmus was hier passiert end; function Explode(const Delimiter, Str: string; QuoteChar: Char): TArray<string>; begin Result := Base(Str.Split([Delimiter], QuoteChar)); end; function Explode(const Delimiter, Str: string): TArray<string>; begin Result := Base(Str.Split([Delimiter])); end; Zitat:
Zitat:
|
AW: Explode-Funktion erweitern, um "a b c" zu ignorieren
Das ist so vollkommen legitim :thumb:
Da die beiden Explode-Overloads eigentlich nichts anderes sind, als Wrapper um den Split-Aufruf, könnte man die auch als inline Deklarieren. Dann spart man sich ein wenig Stack-Geschubse. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz