www.pudn.com > Apriori_Kidney.rar > apz.pas


unit apz; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, DB, ADODB, StdCtrls, ComCtrls, Grids, ExtCtrls; 
 
type 
  Tbing = array[0..40] of string;        //定义单个病种的数组类 
  TForm1 = class(TForm) 
    ADOTable1: TADOTable; 
    ADOTable1gxy: TBooleanField; 
    ADOTable1xlsc: TBooleanField; 
    ADOTable1dmyh2: TBooleanField; 
    ADOTable1gxb: TBooleanField; 
    ADOTable1gxz: TBooleanField; 
    ADOTable1nxg: TBooleanField; 
    ADOTable1wy: TBooleanField; 
    ADOTable1wky: TBooleanField; 
    ADOTable1chy: TBooleanField; 
    ADOTable1jxgy: TBooleanField; 
    ADOTable1yxgy: TBooleanField; 
    ADOTable1gyh: TBooleanField; 
    ADOTable1szjb: TBooleanField; 
    ADOTable1mxzqg: TBooleanField; 
    ADOTable1fxb: TBooleanField; 
    ADOTable1fjh: TBooleanField; 
    ADOTable1jzb: TBooleanField; 
    ADOTable1ggj: TBooleanField; 
    ADOTable1jzy: TBooleanField; 
    ADOTable1dsz: TBooleanField; 
    ADOTable1dny: TBooleanField; 
    ADOTable1qlx: TBooleanField; 
    ADOTable1fgg: TBooleanField; 
    ADOTable1zhi: TBooleanField; 
    ADOTable1pfb: TBooleanField; 
    ADOTable1yany: TBooleanField; 
    ADOTable1quchi: TBooleanField; 
    ADOTable1bnz: TBooleanField; 
    ADOTable1qgy: TBooleanField; 
    ADOTable1swm: TBooleanField; 
    ADOTable1erl: TBooleanField; 
    ADOTable1bdy: TBooleanField; 
    ADOTable1feiy: TBooleanField; 
    ADOTable1jzcy: TBooleanField; 
    ADOTable1weiy: TBooleanField; 
    ADOTable1shiy: TBooleanField; 
    ADOTable1gany: TBooleanField; 
    ADOTable1ruxy: TBooleanField; 
    ADOTable1gjy: TBooleanField; 
    ADOTable1biyy: TBooleanField; 
    ADOTable1bgy: TBooleanField; 
    ADOTable1tnb: TBooleanField; 
    DataSource1: TDataSource; 
    Button1: TButton; 
    ADOQuery1: TADOQuery; 
    ListView1: TListView; 
    ADOQuery1gxy: TBooleanField; 
    ADOQuery1xlsc: TBooleanField; 
    ADOQuery1dmyh2: TBooleanField; 
    ADOQuery1gxb: TBooleanField; 
    ADOQuery1gxz: TBooleanField; 
    ADOQuery1nxg: TBooleanField; 
    ADOQuery1wy: TBooleanField; 
    ADOQuery1wky: TBooleanField; 
    ADOQuery1chy: TBooleanField; 
    ADOQuery1jxgy: TBooleanField; 
    ADOQuery1yxgy: TBooleanField; 
    ADOQuery1gyh: TBooleanField; 
    ADOQuery1szjb: TBooleanField; 
    ADOQuery1mxzqg: TBooleanField; 
    ADOQuery1fxb: TBooleanField; 
    ADOQuery1fjh: TBooleanField; 
    ADOQuery1jzb: TBooleanField; 
    ADOQuery1ggj: TBooleanField; 
    ADOQuery1jzy: TBooleanField; 
    ADOQuery1dsz: TBooleanField; 
    ADOQuery1dny: TBooleanField; 
    ADOQuery1qlx: TBooleanField; 
    ADOQuery1fgg: TBooleanField; 
    ADOQuery1zhi: TBooleanField; 
    ADOQuery1pfb: TBooleanField; 
    ADOQuery1yany: TBooleanField; 
    ADOQuery1quchi: TBooleanField; 
    ADOQuery1bnz: TBooleanField; 
    ADOQuery1qgy: TBooleanField; 
    ADOQuery1swm: TBooleanField; 
    ADOQuery1erl: TBooleanField; 
    ADOQuery1bdy: TBooleanField; 
    ADOQuery1feiy: TBooleanField; 
    ADOQuery1jzcy: TBooleanField; 
    ADOQuery1weiy: TBooleanField; 
    ADOQuery1shiy: TBooleanField; 
    ADOQuery1gany: TBooleanField; 
    ADOQuery1ruxy: TBooleanField; 
    ADOQuery1gjy: TBooleanField; 
    ADOQuery1biyy: TBooleanField; 
    ADOQuery1bgy: TBooleanField; 
    ADOQuery1tnb: TBooleanField; 
    Button2: TButton; 
    Editgate: TEdit; 
    Button3: TButton; 
    Label1: TLabel; 
    Edit1: TEdit; 
    Label2: TLabel; 
    Edit2: TEdit; 
    Label3: TLabel; 
    Edit3: TEdit; 
    Label4: TLabel; 
    Edit4: TEdit; 
    Edit5: TEdit; 
    Label5: TLabel; 
    Label6: TLabel; 
    Edit6: TEdit; 
    Label7: TLabel; 
    Edit7: TEdit; 
    Label8: TLabel; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end ; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
procedure  transtr(i,ib,itnb:integer;ibl,zxd:real;var il:real;var j,jil,jib,jibl,jzxd:string); 
begin                                           //计算及格式转换过程 
j:= inttostr(i)   ; 
     il:=i/3022; 
     ibl:=ib/itnb; 
     zxd:=ibl/il; 
     jil:=floattostr(il); 
     jib:=inttostr(ib)   ; 
     jibl:=floattostr(ibl); 
     jzxd:=floattostr(zxd); 
end; 
 
procedure setvalue(re:real;ig:integer;var il,zxd,ibl:real;var i,ib:integer); 
begin                                    //通过re,ig赋值,初始化各值 
re:=0; 
ig:=0 ; 
il:=re; 
zxd:=re; 
i:=ig; 
ib:=ig; 
ibl:=re; 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
const 
lie1array:Tbing=('gxy','xlsc','dmyh2','gxb','gxz','nxg','wy','wky','chy','jxgy', 
'yxgy','gyh','szjb','mxzqg','fxb','fjh','jzb','ggj','jzy','dsz','dny','qlx', 
'fgg','zhi','pfb','yany','quchi','bnz','qgy','swm','erl','bdy','feiy','jzcy','weiy', 
'shiy','gany','ruxy','gjy','biyy','bgy');       // 赋值数组 
var 
re:real; 
ig:integer; 
v:integer;                 //列扫描指针 
A:array of string;        //非冗余项的单项项集的数组 
H:array of string;        // 侯选项数组 
B:array of string;        //非冗余项的双项项集的数组 
C:array of string;        //非冗余项的三项项集的数组 
D:array of string;        //非冗余项的四项项集的数组 
E:array of string;        //非冗余项的五项项集的数组 
F:array of string;        //非冗余项的6项项集的数组 
countofA:integer;         //非冗余项的单项项集的计数值 
countofB:integer;         //非冗余项的双项项集的计数值 
countofC:integer;         //非冗余项的三项项集的计数值 
countofD:integer;         //非冗余项的四项项集的计数值 
countofE:integer;         //非冗余项的五项项集的计数值 
countofF:integer;         //非冗余项的6项项集的计数值 
m,n,k:integer;             //用于由非冗余项数组产生侯选项数组的变量 
g:integer;                // 设置的糖尿病并发数的域值,判断是否为冗余项 
i:integer  ;              // 项集患者数 
ib:integer  ;                 //糖尿病并发数 
itnb:integer;                 //糖尿病患者总数 
il: real;                     //项集患者数/3022 
ibl:real;                     //糖尿病并发数/糖尿病患者总数 
zxd:real;                     //置信度=ibl/il 
j:string;                     //以下为数据格式转换 
jil:string; 
jib:string; 
jibl:string; 
jzxd:string; 
item: TListItem;              // 动态item 
 
procedure Onelie(x,y:integer;liename1:string;var i,ib:integer); //扫描一列的嵌套过程 
    begin 
   with adoquery1 do 
      if (fieldbyname(liename1).AsVariant='1') 
         then 
           i:=x+1 
         else 
            i:=x; 
   with adoquery1 do 
    if  (fieldbyname(liename1).AsVariant='1')and(fieldbyname('tnb').AsVariant='1') 
         then 
         ib:=y+1 
        else 
         ib:=y; 
            end; 
procedure Twolie(x,y:integer;liename1,liename2:string;var i,ib:integer);//扫描两列的嵌套过程 
    begin 
    with adoquery1 do 
      if (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1') 
         then 
           i:=x+1 
         else 
            i:=x; 
   with adoquery1 do 
    if  (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname('tnb').AsVariant='1') 
         then 
         ib:=y+1 
        else 
         ib:=y; 
            end; 
 
procedure Threelie(x,y:integer;liename1,liename2,liename3:string;var i,ib:integer);//扫描三列的嵌套过程 
    begin 
    with adoquery1 do 
      if (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1') 
         then 
           i:=x+1 
         else 
            i:=x; 
   with adoquery1 do 
    if  (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname('tnb').AsVariant='1') 
         then 
         ib:=y+1 
        else 
         ib:=y; 
            end; 
 
procedure fourlie(x,y:integer;liename1,liename2,liename3,liename4:string;var i,ib:integer);//扫描四列的嵌套过程 
    begin 
    with adoquery1 do 
      if (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname(liename4).AsVariant='1') 
         then 
           i:=x+1 
         else 
            i:=x; 
   with adoquery1 do 
    if  (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname(liename4).AsVariant='1')and(fieldbyname('tnb').AsVariant='1') 
         then 
         ib:=y+1 
        else 
         ib:=y; 
            end; 
 
procedure fivelie(x,y:integer;liename1,liename2,liename3,liename4,liename5:string;var i,ib:integer);//扫描五列的嵌套过程 
    begin 
    with adoquery1 do 
      if (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname(liename4).AsVariant='1')and(fieldbyname(liename5).AsVariant='1') 
         then 
           i:=x+1 
         else 
            i:=x; 
   with adoquery1 do 
    if  (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname(liename4).AsVariant='1')and(fieldbyname(liename5).AsVariant='1')and(fieldbyname('tnb').AsVariant='1') 
         then 
         ib:=y+1 
        else 
         ib:=y; 
            end; 
 
procedure sixlie(x,y:integer;liename1,liename2,liename3,liename4,liename5,liename6:string;var i,ib:integer);//扫描6列的嵌套过程 
    begin 
    with adoquery1 do 
      if (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname(liename4).AsVariant='1')and(fieldbyname(liename5).AsVariant='1')and(fieldbyname(liename6).AsVariant='1') 
         then 
           i:=x+1 
         else 
            i:=x; 
   with adoquery1 do 
    if  (fieldbyname(liename1).AsVariant='1')and(fieldbyname(liename2).AsVariant='1')and(fieldbyname(liename3).AsVariant='1')and(fieldbyname(liename4).AsVariant='1')and(fieldbyname(liename5).AsVariant='1')and(fieldbyname(liename6).AsVariant='1')and(fieldbyname('tnb').AsVariant='1') 
         then 
         ib:=y+1 
        else 
         ib:=y; 
            end; 
 
 
procedure  fillTable(liename,j,jil,jib,jibl,jzxd:string)  ;     //填表的嵌套过程 
begin 
    item.caption := liename ; 
    item.subitems.Add(j)   ; 
     item.subitems.Add(jil); 
    item.subitems.Add(jib); 
     item.subitems.Add(jibl); 
     item.subitems.Add(jzxd); 
end; 
 
procedure judge1(z,ib,g:integer;liename:string;var countofA:integer;var A:array of string); //判断单项冗余项的嵌套过程 
begin                                                                      //细心:var A:array of string 
 if (ib>=g)                                   //如果并发数小于g,判定为冗余项 
     then 
     begin 
     item.subitems.Add('否') ; 
     A[countofA]:=liename   ; 
     countofA:=z+1   ; 
     end 
     else 
       item.subitems.Add('是')  ; 
end; 
 
procedure judge2(z,ib,g:integer;liename1,liename2:string;var countofB:integer;var B:array of string); //判断双项冗余项的嵌套过程 
begin                                                                      //细心:var B:array of string 
 if (ib>=g)                                   //如果并发数小于g,判定为冗余项 
     then 
     begin 
     item.subitems.Add('否') ; 
     B[2*countofB]:=liename1   ; 
     B[2*countofB+1]:=liename2; 
     countofB:=z+1   ; 
     end 
     else 
       item.subitems.Add('是')  ; 
end; 
 
procedure judge3(z,ib,g:integer;liename1,liename2,liename3:string;var countofC:integer;var C:array of string); //判断三项冗余项的嵌套过程 
begin                                                                      //细心:var C:array of string 
 if (ib>=g)                                   //如果并发数小于g,判定为冗余项 
     then 
     begin 
     item.subitems.Add('否') ; 
     C[3*countofC]:=liename1   ; 
     C[3*countofC+1]:=liename2; 
     C[3*countofC+2]:=liename3; 
     countofC:=z+1   ; 
     end 
     else 
       item.subitems.Add('是')  ; 
end; 
 
procedure judge4(z,ib,g:integer;liename1,liename2,liename3,liename4:string;var countofD:integer;var D:array of string); //判断四项冗余项的嵌套过程 
begin                                                                      //细心:var D:array of string 
 if (ib>=g)                                   //如果并发数小于g,判定为冗余项 
     then 
     begin 
     item.subitems.Add('否') ; 
     D[4*countofD]:=liename1   ; 
     D[4*countofD+1]:=liename2; 
     D[4*countofD+2]:=liename3; 
     D[4*countofD+3]:=liename4; 
     countofD:=z+1   ; 
     end 
     else 
       item.subitems.Add('是')  ; 
end; 
 
procedure judge5(z,ib,g:integer;liename1,liename2,liename3,liename4,liename5:string;var countofE:integer;var E:array of string); //判断五项冗余项的嵌套过程 
begin                                                                      //细心:var E:array of string 
 if (ib>=g)                                   //如果并发数小于g,判定为冗余项 
     then 
     begin 
     item.subitems.Add('否') ; 
     E[5*countofE]:=liename1   ; 
     E[5*countofE+1]:=liename2; 
     E[5*countofE+2]:=liename3; 
     E[5*countofE+3]:=liename4; 
     E[5*countofE+4]:=liename5; 
     countofE:=z+1   ; 
     end 
     else 
       item.subitems.Add('是')  ; 
end; 
 
procedure judge6(z,ib,g:integer;liename1,liename2,liename3,liename4,liename5,liename6:string;var countofF:integer;var F:array of string); //判断五项冗余项的嵌套过程 
begin                                                                      //细心:var E:array of string 
 if (ib>=g)                                   //如果并发数小于g,判定为冗余项 
     then 
     begin 
     item.subitems.Add('否') ; 
     F[6*countofE]:=liename1   ; 
     F[6*countofE+1]:=liename2; 
     F[6*countofE+2]:=liename3; 
     F[6*countofE+3]:=liename4; 
     F[6*countofE+4]:=liename5; 
     F[6*countofE+5]:=liename6; 
     countofF:=z+1   ; 
     end 
     else 
       item.subitems.Add('是')  ; 
end; 
 
begin                                            //主程序的开始位置 
if  editgate.Text='' 
  then 
   messagedlg('请输入域值',mtError,[mbok],0) 
else 
 try 
   with adoquery1 do 
   begin 
   g:=strtoint(editgate.Text); 
     sql.clear; 
     sql.add('select * from tjE_g '); 
     open; 
     listview1.Items.BeginUpdate;                 //开始更新 
     try 
     listview1.items.clear; 
     setvalue(re,ig,il,zxd,ibl,i,ib); 
       itnb:=0; 
 
first; 
  while not eof do          //是否读到dataset的最后一条记录 
begin                        //计算糖尿病患者总数 
if (fieldbyname('tnb').AsVariant='1') 
         then 
           itnb:=itnb+1 
         else 
            itnb:=itnb; 
       next;               //读dataset的下一条记录 
     end   ; 
 
 
countofA:=0; 
Setlength(A,50); 
for  v:=0 to 40 do                            //按列扫描(单列扫描) 
begin 
first;                //返回dataset的第一条记录 
      while not eof do                        //按行扫描 
      begin 
      onelie(i,ib,lie1array[v],i,ib)  ; 
      next 
       end; 
       if (i<>0)  then 
    transtr(i,ib,itnb,ibl,zxd,il,j,jil,jib,jibl,jzxd); 
    item := listview1.items.add; 
     fillTable(lie1array[v],j,jil,jib,jibl,jzxd); 
     judge1(countofA,ib,g,lie1array[v],countofA,A); 
    setvalue(re,ig,il,zxd,ibl,i,ib); 
end;                                     //此时A中有(countA)个元素 
 
 
k:=-1; 
Setlength(H,1000); 
for m:=0 to countofA-1 do      //由A产生侯选项数组H (1->2) 
begin 
   for n:=m+1 to countofA-1 do                   //保证没有重项 
   begin 
   k:=k+1; 
   H[2*k]:=A[m]; 
   H[2*k+1]:=A[n]; 
   end; 
  end; 
 
 
countofB:=0; 
Setlength(B,1000); 
for  v:=0 to k do                            //按列扫描 (双列扫描) 
begin 
first;                //返回dataset的第一条记录 
      while not eof do                        //按行扫描 
      begin 
      twolie(i,ib,H[2*v],H[2*v+1],i,ib)  ; 
      next 
       end; 
       if (i<>0)  then 
    transtr(i,ib,itnb,ibl,zxd,il,j,jil,jib,jibl,jzxd); 
    item := listview1.items.add; 
     fillTable(H[2*v]+'&'+H[2*v+1],j,jil,jib,jibl,jzxd); 
     judge2(countofB,ib,g,H[2*v],H[2*v+1],countofB,B); 
    setvalue(re,ig,il,zxd,ibl,i,ib); 
end;                                      //此时B中有2*(countB)个元素 
 
 
k:=-1; 
Setlength(H,1000); 
for v:=0 to 999 do 
H[v]:='';                                   //初始化H 
for m:=0 to countofB-1 do                            //由B产生侯选项数组H (2->3) 
begin 
   for n:=m+1 to countofB-1 do 
   begin 
   if B[2*m]=B[2*n] 
   then 
   begin 
   k:=k+1; 
   H[3*k]:=B[2*m]; 
   H[3*k+1]:=B[2*m+1]; 
   H[3*k+2]:=B[2*n+1]; 
   end; 
   end; 
  end; 
 
countofC:=0; 
Setlength(C,1000); 
for  v:=0 to k do                            //按列扫描 (三列扫描) 
begin 
first;                //返回dataset的第一条记录 
      while not eof do                        //按行扫描 
      begin 
      threelie(i,ib,H[3*v],H[3*v+1],H[3*v+2],i,ib)  ; 
      next 
       end; 
       if (i<>0)  then 
    transtr(i,ib,itnb,ibl,zxd,il,j,jil,jib,jibl,jzxd); 
    item := listview1.items.add; 
     fillTable(H[3*v]+'&'+H[3*v+1]+'&'+H[3*v+2],j,jil,jib,jibl,jzxd); 
     judge3(countofC,ib,g,H[3*v],H[3*v+1],H[3*v+2],countofC,C); 
    setvalue(re,ig,il,zxd,ibl,i,ib); 
end;                                      //此时C中有3*(countC)个元素 
 
k:=-1; 
Setlength(H,1000); 
for v:=0 to 999 do 
H[v]:='';                                   //初始化H 
for m:=0 to countofC-1 do                            //由C产生侯选项数组H (3->4) 
begin 
   for n:=m+1 to countofC-1 do 
   begin 
   if (C[3*m]=C[3*n])and (C[3*m+1]=C[3*n+1]) 
   then 
   begin 
   k:=k+1; 
   H[4*k]:=C[3*m]; 
   H[4*k+1]:=C[3*m+1]; 
   H[4*k+2]:=C[3*m+2]; 
   H[4*k+3]:=C[3*n+2]; 
   end; 
   end; 
  end; 
 
countofD:=0; 
Setlength(D,1000); 
for  v:=0 to k do                            //按列扫描 (四列扫描) 
begin 
first;                //返回dataset的第一条记录 
      while not eof do                        //按行扫描 
      begin 
      fourlie(i,ib,H[4*v],H[4*v+1],H[4*v+2],H[4*v+3],i,ib)  ; 
      next 
       end; 
       if (i<>0)  then 
    transtr(i,ib,itnb,ibl,zxd,il,j,jil,jib,jibl,jzxd); 
    item := listview1.items.add; 
     fillTable(H[4*v]+'&'+H[4*v+1]+'&'+H[4*v+2]+'&'+H[4*v+3],j,jil,jib,jibl,jzxd); 
     judge4(countofD,ib,g,H[4*v],H[4*v+1],H[4*v+2],H[4*v+3],countofD,D); 
    setvalue(re,ig,il,zxd,ibl,i,ib); 
end;                                      //此时D中有4*(countD)个元素 
 
k:=-1; 
Setlength(H,1000); 
for v:=0 to 999 do 
H[v]:='';                                   //初始化H 
for m:=0 to countofD-1 do                            //由D产生侯选项数组H (4->5) 
begin 
   for n:=m+1 to countofD-1 do 
   begin 
   if (D[4*m]=D[4*n])and (D[4*m+1]=D[4*n+1])and(D[4*m+2]=D[4*n+2]) 
   then 
   begin 
   k:=k+1; 
   H[5*k]:=D[4*m]; 
   H[5*k+1]:=D[4*m+1]; 
   H[5*k+2]:=D[4*m+2]; 
   H[5*k+3]:=D[4*m+3]; 
   H[5*k+4]:=D[4*n+3]; 
   end; 
   end; 
  end; 
 
countofE:=0; 
Setlength(E,1000); 
for  v:=0 to k do                            //按列扫描 (五列扫描) 
begin 
first;                //返回dataset的第一条记录 
      while not eof do                        //按行扫描 
      begin 
      fivelie(i,ib,H[5*v],H[5*v+1],H[5*v+2],H[5*v+3],H[5*v+4],i,ib)  ; 
      next 
       end; 
       if (i<>0)  then 
    transtr(i,ib,itnb,ibl,zxd,il,j,jil,jib,jibl,jzxd); 
    item := listview1.items.add; 
     fillTable(H[5*v]+'&'+H[5*v+1]+'&'+H[5*v+2]+'&'+H[5*v+3]+'&'+H[5*v+4],j,jil,jib,jibl,jzxd); 
     judge5(countofE,ib,g,H[5*v],H[5*v+1],H[5*v+2],H[5*v+3],H[5*v+4],countofE,E); 
    setvalue(re,ig,il,zxd,ibl,i,ib); 
end;                                      //此时E中有5*(countE)个元素 
 
k:=-1; 
Setlength(H,1000); 
for v:=0 to 999 do 
H[v]:='';                                   //初始化H 
for m:=0 to countofE-1 do                            //由E产生侯选项数组H (5->6) 
begin 
   for n:=m+1 to countofE-1 do 
   begin 
   if (E[5*m]=E[5*n])and (E[5*m+1]=E[5*n+1])and(E[5*m+2]=E[5*n+2])and(E[5*m+3]=E[5*n+3]) 
   then 
   begin 
   k:=k+1; 
   H[6*k]:=E[5*m]; 
   H[6*k+1]:=E[5*m+1]; 
   H[6*k+2]:=E[5*m+2]; 
   H[6*k+3]:=E[5*m+3]; 
   H[6*k+4]:=E[5*m+4]; 
   H[6*k+5]:=E[5*n+4]; 
   end; 
   end; 
  end; 
 
countofF:=0; 
Setlength(F,1000); 
for  v:=0 to k do                            //按列扫描 (6列扫描) 
begin 
first;                //返回dataset的第一条记录 
      while not eof do                        //按行扫描 
      begin 
      sixlie(i,ib,H[6*v],H[6*v+1],H[6*v+2],H[6*v+3],H[6*v+4],H[6*v+5],i,ib)  ; 
      next 
       end; 
       if (i<>0)  then 
    transtr(i,ib,itnb,ibl,zxd,il,j,jil,jib,jibl,jzxd); 
    item := listview1.items.add; 
     fillTable(H[6*v]+'&'+H[6*v+1]+'&'+H[6*v+2]+'&'+H[6*v+3]+'&'+H[6*v+4]+'&'+H[6*v+5],j,jil,jib,jibl,jzxd); 
     judge6(countofF,ib,g,H[6*v],H[6*v+1],H[6*v+2],H[6*v+3],H[6*v+4],H[6*v+5],countofF,F); 
    setvalue(re,ig,il,zxd,ibl,i,ib); 
end;                                      //此时F中有6*(countF)个元素 
 
 
 
 
    except 
     listview1.items.Clear; 
     messagedlg('运行出错',mtError,[mbok],0); 
   end  ; 
 end; 
 
 
 
   finally 
    Listview1.Items.EndUpdate;                     //结束更新 
end; 
edit1.Text:=inttostr(countofA); 
edit2.Text:=inttostr(countofB); 
edit3.Text:=inttostr(countofC); 
edit4.Text:=inttostr(countofD); 
edit5.Text:=inttostr(countofE); 
edit6.Text:=inttostr(Listview1.Items.Count); 
edit7.Text:=inttostr(itnb); 
end; 
 
 
 
 
 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
close; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject);            //复位过程 
begin 
editgate.Text:=''; 
edit1.Text:=''; 
edit2.Text:=''; 
edit3.Text:=''; 
edit4.Text:=''; 
edit5.Text:=''; 
edit6.Text:=''; 
edit7.Text:=''; 
listview1.items.Clear; 
end; 
 
end.