我的程序循环中哪有毛病? (80分)

  • 主题发起人 主题发起人 chenfsb
  • 开始时间 开始时间
C

chenfsb

Unregistered / Unconfirmed
GUEST, unregistred user!
程序实现:
1.一次读入多个文本文件
2.每读一个文件会向csbx2表中插入1002个值
问题是我试着多选几个文件,第二次执行文件读入问题执行了2004次,第一次是执行了1002
次,我的循环哪有问题?我已经检查过N遍了。选择的文件个数越多,后面执行的文件总是
执行的次数越多。

begin
ID:='';
filelist:=TStringlist.Create;
valuelisty:=TStringlist.Create;
valuelist:=TStringlist.Create;
xvalue:=TStringlist.Create;
if OpenDialog1.Execute then
begin
wave:='';
filelist.Assign(OpenDialog1.Files);
for J:=0 to filelist.Count -1 do
begin
ID:=ChangeFileExt(ExtractFileName(OpenDialog1.Files[J]),'');
valuelist.LoadFromFile(filelist[J]);
for I:=0 to valuelist.Count-1 do
begin
if valuelist.Names='Axial Force' then
A:=StrToFloat(valuelist.ValueFromIndex)
else if valuelist.Names='Confining Pressure' then
C:=StrToFloat(valuelist.ValueFromIndex)
else if valuelist.Names='Pore Pressure' then
P:=StrToFloat(valuelist.ValueFromIndex)
else if valuelist.Names='Temperature' then
T:=StrToFloat(valuelist.ValueFromIndex)
else if valuelist.Names='Length' then
L:=StrToFloat(Format('%6.3f',[StrToFloat(valuelist.ValueFromIndex)/StrToFloat('1E+3')]))
else if valuelist.Names='Wave' then
wave:=Trim(valuelist.ValueFromIndex)
else if Length(valuelist)<4 then
begin
valuelisty.Add(valuelist);
ConvertValues(valuelisty);//自定义的函数
end;
end;
for I:=1 to 1002 do
begin
xvalue.Add(Format('%8.6f',[(I-1)*20/1001]));
end;
sql1:='';
sql2:='';
sql1:='insert into csbx1(ID,A,C,P,T,L,type) values('''+ID+''','''+FloatToStr(A)+''',';
sql1:=sql1+''''+FloatToStr(C)+''','''+FloatToStr(P)+''','''+FloatToStr(T)+''',';
sql1:=sql1+''''+FloatToStr(L)+''','''+wave+''')';
DataModule2.ADOQuery1.Close;
DataModule2.ADOQuery1.SQL.clear;
DataModule2.ADOQuery1.SQL.add(sql1);
DataModule2.ADOQuery1.ExecSQL;
for K:=0 to xvalue.Count-1 do
begin
sql2:='insert into csbx2(ID,xvalue,yvalue) values('''+ID+''','''+xvalue[K]+''','''+valuelisty[K]+''')';
DataModule2.ADOQuery2.Close;
DataModule2.ADOQuery2.SQL.clear;
DataModule2.ADOQuery2.SQL.add(sql2);
DataModule2.ADOQuery2.ExecSQL;
end;
end;
end;
filelist.Free;
valuelist.Free;
valuelisty.Free;
xvalue.free;
end;

 
for I:=1 to 1002 do
begin
xvalue.Add(Format('%8.6f',[(I-1)*20/1001]));
end;
之前加上:
xvalue.Clear;
 
这样不是办法,你不会让大家帮你调吧?你用Delphi的单步调试保证你找出Bug。
自己动手有好处的。
 
else if Length(valuelist)<4 then
begin
valuelisty.Add(valuelist)
// 处理每个文件之前valuelisty是否需要清空一下?
ConvertValues(valuelisty);//自定义的函数
end;
end;
for I:=1 to 1002 do
begin
xvalue.Add(Format('%8.6f',[(I-1)*20/1001]))
//同上,是否需要清空?
end;
 
是的应该清空
 
后退
顶部