回 帖 发 新 帖 刷新版面

主题:关于Tstringlist.Find()的问题!!!!!!

奇怪了 !!!谁知道这是为什么啊???
var
   strlist:tstringlist;
如果我用
  strlist.add('你好啊');
  strlist.find('你好啊',i) 的值是true;
如果我有一个文件内容是 你好啊
然后 
  strlist.loadfromfile(....);
  strlist.find('你好啊',i) 的值就是false;
  可是察看 strlist[0] 就是 你好啊 没有错啊!! 
字符串我全用过Trim()以后还是一样,这是为什么啊?

回复列表 (共6个回复)

沙发

strlist.add('你好啊');
strlist.loadfromfile(....);
这不是同等啊,一个只是单独一项,一个是全部了

板凳

我觉得他们是一样的阿,Tstringlist 不就是一个指针数组吗?他是一个string的集合,stringlist[n] 就是一个string,也就和用Add加入的一样阿。
虽然加入的是一个集合,但是我要找的是stringlist[n]。
  就是我多次用add 加入以后还是可以正常用find的,就是不能批量加入,我试过了,用for....do  
        begin
           add()
         end;
find又不能用了,一直是false;

3 楼

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 楼

我的怎么还是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 楼

我知道我知道这是为什么了~~楼上的你用的是字母,我用的是汉字。我看了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 楼

是的,的确是这样的,我也学到了不少东西,谢谢楼主!

我来回复

您尚未登录,请登录后再回复。点此登录或注册