unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, superobject;type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Memo3: TMemo;
Memo4: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
StrJson: ISuperObject;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Text := Memo1.Text;
sl.Sort;
Memo1.Text := sl.Text;
sl.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer; procedure Insert(s: string);
var
sl: Integer;
slen: Integer;
sss: string;
ss: string;
begin
slen := Length(s);
sss := '';
ss := '';
for sl := 1 to slen do
begin
sss := IntToStr(Ord(s[sl]));
//sss := s[sl];
//if (sss=' ') or (sss='.') then sss := IntToStr(Ord(sss));
if sss<>'' then
if ss='' then
ss := sss
else
ss := ss + '.' + sss;
if StrJson.O[ss]=nil then
begin
if sl=slen then
StrJson.O[ss] := SO('{flg:1}')
else
StrJson.O[ss] := SO('{flg:0}');
end;
end;
end;begin
for I := 0 to Memo1.Lines.Count - 1 do
begin
Insert(Memo1.Lines[I]);
end;
Memo2.Text := StrJson.AsJSon(True, True);
end;procedure TForm1.Button3Click(Sender: TObject);
var
s: string;
sss: string;
ss: string;
ms: string;
slen: Integer;
sI: Integer;
flg: Integer;
lst: TStringList;
n1,n2: Int64; function GetFlg(const path: string): Integer;
begin
Result := -1;
if StrJson.O[path]<>nil then
Result := StrJson.O[path].I['flg'];
end;
begin
//查找
s := Memo3.Text;
slen := Length(s);
sss := '';
ss := '';
ms := '';
lst := TStringList.Create;
sI := 1;
n1 := GetTickCount;
for sI := 1 to slen do
begin
sss := IntToStr(Ord(s[sI]));
//sss := s[sI];
//if (sss=' ') or (sss='.') then sss := IntToStr(Ord(sss));
if ss='' then
begin
ss := sss;
ms := s[sI];
end
else begin
ss := ss + '.' + sss;
ms := ms + s[sI];
end;
flg := GetFlg(ss);
if flg=-1 then
begin
//没有找到,清除ss
ss := '';
ms := '';
Continue;
end
else if flg=0 then begin
//已找到但不是词
Continue;
end
else begin
//是词
lst.Add(ms);
Continue;
end;
end;
n2 := GetTickCount - n1;
Memo4.Text := lst.Text;
lst.Free;
Edit1.Text := IntToStr(n2);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
StrJson := TSuperObject.Create(stObject);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
StrJson := nil;
end;end.
Button1 只是个对关键词排序
Button2 是把词语加载到json,就是hash表Button3 就是遍历Memo3.text中的文本,进行查找请高手指点
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, superobject;type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Memo3: TMemo;
Memo4: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
StrJson: ISuperObject;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
sl.Text := Memo1.Text;
sl.Sort;
Memo1.Text := sl.Text;
sl.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer; procedure Insert(s: string);
var
sl: Integer;
slen: Integer;
sss: string;
ss: string;
begin
slen := Length(s);
sss := '';
ss := '';
for sl := 1 to slen do
begin
sss := IntToStr(Ord(s[sl]));
//sss := s[sl];
//if (sss=' ') or (sss='.') then sss := IntToStr(Ord(sss));
if sss<>'' then
if ss='' then
ss := sss
else
ss := ss + '.' + sss;
if StrJson.O[ss]=nil then
begin
if sl=slen then
StrJson.O[ss] := SO('{flg:1}')
else
StrJson.O[ss] := SO('{flg:0}');
end;
end;
end;begin
for I := 0 to Memo1.Lines.Count - 1 do
begin
Insert(Memo1.Lines[I]);
end;
Memo2.Text := StrJson.AsJSon(True, True);
end;procedure TForm1.Button3Click(Sender: TObject);
var
s: string;
sss: string;
ss: string;
ms: string;
slen: Integer;
sI: Integer;
flg: Integer;
lst: TStringList;
n1,n2: Int64; function GetFlg(const path: string): Integer;
begin
Result := -1;
if StrJson.O[path]<>nil then
Result := StrJson.O[path].I['flg'];
end;
begin
//查找
s := Memo3.Text;
slen := Length(s);
sss := '';
ss := '';
ms := '';
lst := TStringList.Create;
sI := 1;
n1 := GetTickCount;
for sI := 1 to slen do
begin
sss := IntToStr(Ord(s[sI]));
//sss := s[sI];
//if (sss=' ') or (sss='.') then sss := IntToStr(Ord(sss));
if ss='' then
begin
ss := sss;
ms := s[sI];
end
else begin
ss := ss + '.' + sss;
ms := ms + s[sI];
end;
flg := GetFlg(ss);
if flg=-1 then
begin
//没有找到,清除ss
ss := '';
ms := '';
Continue;
end
else if flg=0 then begin
//已找到但不是词
Continue;
end
else begin
//是词
lst.Add(ms);
Continue;
end;
end;
n2 := GetTickCount - n1;
Memo4.Text := lst.Text;
lst.Free;
Edit1.Text := IntToStr(n2);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
StrJson := TSuperObject.Create(stObject);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
StrJson := nil;
end;end.
Button1 只是个对关键词排序
Button2 是把词语加载到json,就是hash表Button3 就是遍历Memo3.text中的文本,进行查找请高手指点
忘记说了,这个算法无Pos无关,并不是单纯的查找单个字符串