Ich habe mir eine eigene Klasse entworfen um einen String der durch Separatoren getrennt ist in einzelne Strings zu zerlegen.
Delphi-Quellcode:
type TSplitString = class
private
FString2Split : String;
FSepChar : Char;
FStrings : TSplitStrArray;
FStringsCount : Integer;
FSepPos : array of Integer;
procedure SetSplitString(SplitStr: String);
procedure SetSepChar(sep: Char);
procedure SetSepPos;
procedure SplitString;
public
constructor create(SplitStr: String; sep: Char);
property String2Split: String read FString2Split write SetSplitString;
property SepChar: Char read FSepChar write SetSepChar;
function StringsCount: Integer;
property SplitStringEx: TSplitStrArray read FStrings write SplitString; { hier kommt die Meldung: "Inkompatible Typen" }
end;
constructor TSplitString.create(SplitStr: String; sep: Char);
var
i : Integer;
begin
FStringsCount := 0;
SetSplitString(SplitStr);
SetSepChar(sep);
if SplitStr[length(SplitStr)] <> sep then
SplitStr := SplitStr+sep;
for i := 1 to length(SplitStr)-1 do
begin
if SplitStr[i] = sep then Inc(FStringsCount);
end;
SetSepPos;
end;
procedure TSplitString.SetSepPos;
var
i, j : Integer;
begin
j := 0;
setlength(FSepPos, FStringsCount+1);
FSepPos[0] := 0;
for i := 1 to length(FString2Split)-1 do
begin
if FString2Split[i] = FSepChar then
begin
FSepPos[j+1] := i;
Inc(j);
end;
end;
end;
procedure TSplitString.SetSplitString(SplitStr: String);
begin
if SplitStr = '' then
Messagebox(0, 'Die Zeichenfolge ist leer.', 'Hinweis - TSplitString', MB_ICONINFORMATION);
FString2Split := SplitStr;
end;
procedure TSplitString.SetSepChar(sep: Char);
begin
if sep = '' then
Messagebox(0, 'Das Trennzeichen ist leer.', 'Hinweis - TSpliString', MB_ICONINFORMATION);
FSepChar := sep;
end;
function TSplitString.StringsCount: Integer;
begin
result := FStringsCount;
end;
procedure TSplitString.SplitString;
var
i : Integer;
begin
setlength(FStrings, FStringsCount);
for i := 0 to FStringsCount-1 do
begin
FStrings[i] := copy(FString2Split, FSepPos[i], FsepPos[i+1]-FSepPos[i]);
end;
end;
An der besagten Stelle kommt eben diese Fehlermeldung.
property SplitStringEx: TSplitStrArray read FStrings write SplitString;
Soll zum einen das Array mit den aufgeteilten Strings zurückgeben und zum anderen es füllen. Aber irgendwie mache ich da was falsch.
Verbesserungsvorschläge und Vereinfachungen der Klasse sind auch herzlich willkommen.