Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Probleme mit eigener Klasse

  Alt 28. Feb 2003, 20:20
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat