|
unit SkyStringTokenizer;
{字符串分析处理类
}
interface
uses
SysUtils, Classes;
type
IIterator = interface
function hasNext(): boolean;
function next(): string;
end;
type
TSkyStringTokenizer = class(TComponent, IIterator)
private
tokens: TStringList;
index: integer;
data: string;
delimiter: string;
procedure init(dataLine: string; delim: string);
function CharacterInTokens(ch: string; const sl: TStringList): boolean;
function StringToCharArray(delim: string): TStringList;
function SplitString(source, ch: string): Tstringlist;
protected
{ Protected declarations }
public
{ Public declarations }
constructor create(dataLine: string); overload;
constructor Create(dataLine: string; delim: string); overload;
destructor destroy();override;
function hasNext(): boolean;
function next(): string;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('SkyDevKit', [TSkyStringTokenizer]);
end;
{ TStringTokenizer }
function TSkyStringTokenizer.hasNext: boolean;
begin
result := (index < tokens.Count - 1);
end;
procedure TSkyStringTokenizer.init(dataLine, delim: string);
begin
tokens := TStringList.Create();
delimiter := delim;
data := dataLine;
tokens := SplitString(data, delimiter);
//tokens := data.Split(delimiter.ToCharArray());
index := -1;
end;
function TSkyStringTokenizer.next: string;
var
s: string;
begin
inc(index);
s := tokens[index];
while ((length(s) <= 0) and (index < tokens.Count)) do
begin
inc(index);
s := tokens[index];
end;
result := s;
上一篇:编辑框和位图按钮的特殊结合
下一篇:程序中调用控制面板设置功能
|