任意字符串Str(widestring),任意两个关键词,现在要查两个关键词在文章内容中的位置。
比如:两关键词为key1:='中国';
key2:='中国人';Str='我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'查出位置后是
中国人 3
中国 10
中国 13
中国 24
中国人 31
结果可以写入数组,文本等都可以。
即某一位置查找到“中国人”,即使包含中国,也只记录较长的关键词的位置。
比如:两关键词为key1:='中国';
key2:='中国人';Str='我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'查出位置后是
中国人 3
中国 10
中国 13
中国 24
中国人 31
结果可以写入数组,文本等都可以。
即某一位置查找到“中国人”,即使包含中国,也只记录较长的关键词的位置。
VAR STR1:STRING:临时变量
P_KEY:INTEGER;
STR1:=STR;
先用长的关键字找
P_KEY:=POS(KEY,STR1);
WHILE P_KEY>0 DO
BEGIN
DELETE(STR1,P,LENGTH(KEY));
P_KEY:=POS(KEY,STR1);
END;
然后在用短的比较剪辑过的STR1,如果关键字多,就用循环。
procedure TForm1.Button1Click(Sender: TObject);
var str,str2:string;
intThePos:integer;
begin
str:='123123123';
str2:='2';
while pos(str2,str)>0 do
begin
intThePos:=intThePos+Inttostr(pos(str2,str))
memo1.Lines.Add(intThePos);
str:=copy(str,pos(str2,str)+1,length(str)-pos(str2,str));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var str,str2:string;
intThePos:integer;
begin
str:='123123123';
str2:='2';
intThePos:=0;
while pos(str2,str)>0 do
begin
intThePos:=intThePos+pos(str2,str);
memo1.Lines.Add(Inttostr(intThePos));
str:=copy(str,pos(str2,str)+1,length(str)-pos(str2,str));
end;
end;
str2:='2';
运行得出
2
5
8
var
S, Substr: string;
Len, P: Integer;
Rresult1,Rresult2:string;
begin
S := '我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'';
Substr := '中国人';
Len := Length(Substr);
P := AnsiPos(Substr, S);
while P <> 0 do
begin
Delete(S, P, Len);
P := AnsiPos(Substr, S);
Rresult1:=Rresult+' '+inttostr(p); //记录下中国人的位置,
end;
while P <> 0 do
begin
substr:='中国';
Len := Length(Substr);
P := AnsiPos(Substr, S);
while P <> 0 do
begin
Delete(S, P, Len);
P := AnsiPos(Substr, S);
Rresult2:=Rresult+' '+inttostr(p); //记录下中国的位置,
end; end;
end;
先找中国人,再找中国,原理和下面的一样
var
S, Substr: string;
Len, P: Integer;
Rresult1,Rresult2:string;
begin
S := '我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'';
Substr := '中国人';
Len := Length(Substr);
P := AnsiPos(Substr, S);
while P <> 0 do
begin
Delete(S, P, Len);
P := AnsiPos(Substr, S);
Rresult1:=Rresult+' '+inttostr(p); //记录下中国人的位置,
end;
//改正后的
substr:='中国';
Len := Length(Substr);
P := AnsiPos(Substr, S);
while P <> 0 do
begin
while P <> 0 do
begin
Delete(S, P, Len);
P := AnsiPos(Substr, S);
Rresult2:=Rresult+' '+inttostr(p); //记录下中国的位置,
end; end;
end;