Evo objekta koji sam uradio za sve zive potrebe tog tipa
TStringTokenizer = class(TObject)
private
FDelimeter: Char;
FInputString: string;
public
constructor Create(s: string; Delim: Char); overload;
constructor Create; reintroduce; overload;
function GetLastToken: string;
function NextToken: string;
function Count: Integer;
property InputString: string read FInputString write FInputString;
property Delimeter: Char read FDelimeter write FDelimeter;
end;
constructor TStringTokenizer.Create(s: string; Delim: Char);
begin
FDelimeter := Delim;
FInputString := s;
end;
function TStringTokenizer.Count: Integer;
var
s : string;
i, gde : Integer;
begin
Result := 0;
s := FInputString;
if s = '' then
exit;
if pos(FDelimeter, s) = 0 then
begin
Result := 1;
exit;
end;
if s[1] = FDelimeter then
Delete(s, 1, 1);
if s[Length(s)] = FDelimeter then
s := copy(s, 1, Length(s) - 1);
i := 1;
while Pos(FDelimeter, s) <> 0 do
begin
gde := Pos(FDelimeter, s);
Delete(s, 1, gde);
inc(i);
end;
Result := i;
end;
constructor TStringTokenizer.Create;
begin
inherited Create;
end;
function TStringTokenizer.NextToken: string;
var
i : Integer;
begin
i := pos(FDelimeter, FInputString);
if i < 1 then
i := Length(FInputString);
Result := Copy(FInputString, 1, i); //- 1);
if i > 0 then
Delete(FInputString, 1, i);
if Result <> '' then
if Result[Length(Result)] = FDelimeter then
Delete(Result, Length(Result), 1);
end;
function TStringTokenizer.GetLastToken: string;
var
s : string;
gde : Integer;
begin
s := FInputString;
if s[Length(s)] = FDelimeter then
s := copy(s, 1, Length(s) - 1);
while Pos(FDelimeter, s) <> 0 do
begin
gde := Pos(FDelimeter, s);
Delete(s, 1, gde);
end;
Result := s;
end;
|