一下是我的一段代码,它的主要工作是分析出,哪些单位名是相近的,我采用的方法比较笨,就是通过测试两个单位名(从数据库中读出)相同字数来决定他们是否相似
现在的问题是,面对两张表中的相同数据出现了不同结果,一天了,不知道为什么//////////以下代码用于申请号分配的初始工作,显示与第一条记录相似的企业,总体思路是一个字符一个字符的比较最后求出相似度///
procedure fpbh(query3:TQuery;listbox:TListBox;edit:TEdit);
  var
     counter:integer;
     insertstr:widestring;
     temp1:widestring;
     loop:integer;
     loop1:integer;
     flag:integer;//标志位用于标示该记录是否唯一
  begin
    flag:=0;
    counter:=0;//计数器
    chaxun:='select * from suntest';//这是其中的一张表,用它我可以得到想要的结果,用另一张,其中的数据远大于suntest,则结果不对
    query3.Close;
    query3.SQL.Clear;
    query3.SQL.Add(chaxun);
    query3.Open;
    query3.First;
    temp:=query3.FieldByName('gsm').AsString;
    edit.Text:=temp;
    query3.Next;
    while not query3.Eof do
     begin
      temp1:=query3.FieldByName('gsm').AsString;      
      for loop:=1 to length(temp)do//比较字符串的相同个数
          for loop1:=1 to length(temp1)do
          begin
            if(trim(temp[loop])=trim(temp1[loop1]))then
              counter:=counter+1;
          end;
      if((counter/length(temp1))>0.5)then
        begin
         ListBox.items.add(temp1);
         flag:=1;
         counter:=0;
        end;
      query3.Next;
     end;
    if(flag=0)then
       showmessage('该记录结果唯一');
   end;
同学们请帮帮我吧

解决方案 »

  1.   

    呵呵,只想说:
    1、这算法的确不高明
    2、代码可优化的地方太多
    3、整个看来,这些代码就是只判断第一条记录与后面的记录相不相似,至于第二条与第三条是不是相似就不管它了.........
    4、解答你的问题:counter没有被重新置为零。你的代码中,当找到相似字串后,才重置counter为0,如果没有找到,那么counter的值就是上次比较的结果。这样当然不正确服
      

  2.   

    我没仔细看,为什么不用pos函数