数组查找比较在一个文本中有50个数组
排列为:name=aaa
01ss0001b    xxxx    456.41n  //456n是测试出的一个数,数有加密,实际数=20log(456.41)
01ss0002b    xxxx    420.14n
   :          :      :
   :          :      :
01ss0080b    xxxx    0.1114nname=bbb
02ss0001b    xxxx    406.25n       
02ss0002b    xxxx    400.47n
   :          :      :
   :          :      :
02ss0080b    xxxx    501.57nname=ddc
03ss0001b    xxxx    511.36n
   :          :      :
   :          :      :
   :          :      :
name=ddc  //第70组数名
70ss0080b    xxxx    571.23n  如何查找文件中另一数数各行的第三个实际数(实际数=20log(456.41)) 
与aaa数组中各行的第三个实际数误差在+/-0.5之内,
如找到aaa与bbb数组附合条件则显示:aaa--bbb
然后查找第三个数组相附的数组,当然第二次找查要排除aaa和bbb数组了!

解决方案 »

  1.   

    本人刚自学,那位大哥如能做成实例发我邮箱最好了:[email protected]
    先谢了!
      

  2.   

    name=ddc  //第70组数名 
    70ss0080b    xxxx    571.23n 
    打错字是第50组
    50ss0001b    xxxx    571.23n 
      

  3.   

    不知这是不是楼主要的效果
    楼主可以参考一下,就是比较两个数组中的内容,逐个元素比较过去,若不相同,则删之,你可以作修改,改成你要的.....
    --------------------------------------------------------------------
    //如果两个数组的元素个数不一至,则用元素多的数组的个数进行循环
    var shortStr,longStr  : array of string;
    if hight(shortStr)= hight(longStr) then
      CompareCount := hight(longStr)
    else if hight(longStr)> hight(shortStr) then  
      CompareCount := hight(shortStr)            
    For i := 0 to length(longStr)- 1 do //将两个数组中的内容进行比较
    begin
      OldTag := i;
      NewTag := i;
      if IsAddFolder then
      begin
        OldTag := OldTag - DeleteCount;//如果数组 longStr中有删除元素,则shortStr,longStr 的下标要相应的往后移
         NewTag := NewTag - DeleteCount;
      end;
      if Hight(shortStr) <= NewTag then //直到两个数组的元素个数一至时,退出循环,作其它处理
      begin
        IsAddFolder := true;
        break;
      end;
      //此处进行判断是否为相同
      if shortStr[OldTag] <> longStr[NewTag]  then  
      begin
        if i = 0 then  //删除长数组中的元素 ,()内的值 为数组下标
        begin
          (i)//删除数组元素
        end
        else
        begin
          (i-DeleteCount)//删除数组元素
        end; 
         Inc(DeleteCount);                      //保证 OldFile 与 NewFile 的下标一至
         IsAddFolder := true;                 
      end;                      
    end;
        if IsAddFolder then                                            //下载旧的XML文件中没有的文件夹
        begin
          For i := CompareCount - 1 downto  0 do
          begin
            //删除长数组的元素longStr[]
          end;
        end;
      

  4.   

    可能是我没表达清楚吧! 
    我是要将数组内指定位的数,全部计算后比较, 
    比如第一个数组的第三行的第三个数是123.5n,去掉最后的n,再把123.5代入公式(=20log(456.41) )计算,比如结果是10, 
    再查找其它数组的第三行的第三个数,通过上面的方法计算后为B,与上面的数对比,如果:(10+误差值)>B>(10-误差值),刚纵容过上面的方法再比较第4行(或第5,6行)的第三个数 
    如果全通过,则记录上面二个数组名,并删除上面二个数组,如果没有找到配对的数组,则把数组名记录到另一文本,同时数组也删除, 
    然后读取下一数组再重复上面动作!
      

  5.   

    你都指定是哪一行了,更容易.
    name=aaa 
    01ss0001b    xxxx    456.41n  //456n是测试出的一个数,数有加密,实际数=20log(456.41) 
    01ss0002b    xxxx    420.14n 
      :          :      : 
      :          :      : 
    01ss0080b    xxxx    0.1114n 
    将各个数组装入 strinlgist 中,直接计算第三行,如果相同则进行处理.如果不同,跳过..
    var Temp : STringlist;
    For i := 0 to hight(数组名) -1 do 
    beign
       Temp.DelimitedText := ' ';
       Temp.CommaText := 数组名[i];
       For j := 0 to Temp.Count -1 do 
       begin
         case j of 
           2 : begin
                 计算两个值    
               end;
           end;
           break; 
       end;
    end;