access数据库中某字段值按升序依次为1,2,3,5,7,10,14,17,19,21共十个数字。请教如何用delphi代码实现将前后小于等于2的数字筛选出来,得到结果为(1)1,2,3,5,7;(2)17,19,21两组数据,并实现在word中的分行显示或者每个数组写入到一个word文件中。详细地说就是,如果从首个数字开始往后循环比较,满足小于等于2的数字筛选出来,应该是得到1,2,3;2,3;3,5;5,7;17,19;19,21,这样六个数组。我想把这些数组再做个关联应用,以上六个数组中存在相同数字的就视其为彼此关联,比如2,3与3,5有数字3是共有的,然后把这些数组一起合并组成一个新的数组,所以最后得到(1)1,2,3,5,7;(2)17,19,21两组数据。请高手帮忙!!最好以代码告之! 

解决方案 »

  1.   

    ...procedure NumGroup(ANumArr:array of Integer;ANumDiff:Integer;AStrings:TStrings);
    var
      i,j,k,m,n:Integer;
      s:string;
    begin
      AStrings.Clear;  for i:=0 to High(ANumArr) do
        for j:=0 to High(ANumArr) do
          if ANumArr[j]>ANumArr[j+1] then
          begin
            k:=ANumArr[j];
            ANumArr[j]:=ANumArr[j+1];
            ANumArr[j+1]:=k;
          end;  i:=0;
      while i<=High(ANumArr) do
      begin
        s:='';
        k:=ANumArr[i];
        for j:=i+1 to High(ANumArr) do
        begin
          m:=ANumArr[j];
          n:=ANumArr[j-1];
          if (m-n<=ANumDiff) and (m-k<=ANumDiff) then
          begin
            k:=m;
            if Pos(inttostr(n),s)=0 then s:=s+' '+inttostr(n);
            s:=s+' '+inttostr(m);
          end;
        end;    inc(i,k);    AStrings.Add(s);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      NumGroup([1,2,3,5,7,10,14,17,19,21],2,Memo1.Lines);
    end;