主题:关于Tstringlist.Find()的问题!!!!!!
xiaohongna
[专家分:180] 发布于 2006-09-13 17:17:00
奇怪了 !!!谁知道这是为什么啊???
var
strlist:tstringlist;
如果我用
strlist.add('你好啊');
strlist.find('你好啊',i) 的值是true;
如果我有一个文件内容是 你好啊
然后
strlist.loadfromfile(....);
strlist.find('你好啊',i) 的值就是false;
可是察看 strlist[0] 就是 你好啊 没有错啊!!
字符串我全用过Trim()以后还是一样,这是为什么啊?
回复列表 (共6个回复)
沙发
冰封星云 [专家分:2260] 发布于 2006-09-14 08:45:00
strlist.add('你好啊');
strlist.loadfromfile(....);
这不是同等啊,一个只是单独一项,一个是全部了
板凳
xiaohongna [专家分:180] 发布于 2006-09-14 09:56:00
我觉得他们是一样的阿,Tstringlist 不就是一个指针数组吗?他是一个string的集合,stringlist[n] 就是一个string,也就和用Add加入的一样阿。
虽然加入的是一个集合,但是我要找的是stringlist[n]。
就是我多次用add 加入以后还是可以正常用find的,就是不能批量加入,我试过了,用for....do
begin
add()
end;
find又不能用了,一直是false;
3 楼
hanzhijun402 [专家分:3690] 发布于 2006-09-15 17:49:00
procedure TForm1.Button1Click(Sender: TObject);
var
str:Tstringlist;
i:integer;
begin
str:=tstringlist.create;
str.LoadFromFile('C:\zdm.txt');
if str.Find('hgbm',i)=true then
showmessage('true')
else
showmessage('false')
end;
end.
可以的啊,show出来的结果显示为true!
4 楼
xiaohongna [专家分:180] 发布于 2006-09-19 08:23:00
我的怎么还是false阿 ?
var
strlist:Tstringlist;
i:integer;
begin
strlist:=Tstringlist.Create;
strlist.LoadFromFile('d:\try.txt');
if strlist.Find('丁香〓134',i) then
showmessage('true')
else
showmessage('false');
end;
文件内容:
丁寇理中丸〓298
丁香〓134
丁香〓135
丁桂散〓298
十全大补膏〓332
十全大补膏〓334
这是为什么啊 ?为什么我就不能用那?
5 楼
xiaohongna [专家分:180] 发布于 2006-09-19 08:34:00
我知道我知道这是为什么了~~楼上的你用的是字母,我用的是汉字。我看了find发放的源代码知道这是为什么了,find只用来查找有序的,对汉字不好用看看他们的源代码
function TStringList.Find(const S: string; var Index: Integer): Boolean;
var
L, H, I, C: Integer;
begin
Result := False;
L := 0;
H := FCount - 1;
while L <= H do
begin
I := (L + H) shr 1;
C := CompareStrings(FList^[I].FString, S);
if C < 0 then L := I + 1 else
begin
H := I - 1;
if C = 0 then
begin
Result := True;
if Duplicates <> dupAccept then L := I;
end;
end;
end;
Index := L;
end;
他用的是2分法查找的~~我的那些字符是无序的~所以它就找不到了
6 楼
hanzhijun402 [专家分:3690] 发布于 2006-09-19 22:32:00
是的,的确是这样的,我也学到了不少东西,谢谢楼主!
我来回复