简单的条件选择语句遇到怪问题

liujiawa07 2012-09-06 11:55:39
我将数组变量存文件,但再读回来其中第二、四组变量全为0。
procedure TForm1.Button1Click(Sender: TObject);
var
MF: TStringList;
begin
MF:= TStringList.Create;
try
For i:=1 to 20 do
MF.Add(inttostr(wjpx0[i]));
For i:=1 to 20 do
MF.Add(inttostr(xjpx0[i]));
For i:=1 to 20 do
MF.Add(inttostr(sjpx0[i]));
For i:=1 to 6 do
MF.Add(inttostr(dppx0[i]));
MF.SaveToFile('abc'+'.txt');
finally
MF.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
MF: TStrings;
begin
If Opendialog1.Execute then begin
MF:= TStringList.Create;
try
MF.LoadFromFile(opendialog1.filename);
//icount:=MF.Count;
For i:=0 to 64 do begin
j:=strtoint(MF.strings[i]);
If i in [0..19] then
wjpx0[i+1]:=j
else if i in [20..39] then
xjpx0[i+1]:=j
else if i in [40..59] then
sjpx0[i+1]:=j
else if i in [60..64] then
end;
finally
MF.Free;
end; end;
end;

这样的语句用过千次,这次问题怎么跟踪也找不到问题出在哪里?
百思不得其解,请帮我看一下。
...全文
147 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-05-01
  • 打赏
  • 举报
回复
不然两个数字,会合并成一个,你会丢失数据
lm_whales 2013-05-01
  • 打赏
  • 举报
回复
写入文件前,数字之间,要加分隔符如逗号,空格什么的,换行。 读回来时,通过分隔符区别不同数据,并滤除分隔符。
hsfzxjy 2012-09-08
  • 打赏
  • 举报
回复
LZ,你查看过文件了吗
广州佬 2012-09-08
  • 打赏
  • 举报
回复
9楼的表达方式就明了、清晰多了。

要越界,就都越了,既然保存时用了 MF.SaveToFile('abc'+'.txt'); 读的时候就直接 MF.LoadFromFile('abc'+'.txt'); 好了。别是弄晕了,用那对话选择文件时选错了。
hsfzxjy 2012-09-07
  • 打赏
  • 举报
回复
既然你用TStringList.Create,不如直接将它定义成TStringList。还有你打开文件看过了吗?数据真的对吗?问题不一定只出在读取部分
kaikai_kk 2012-09-06
  • 打赏
  • 举报
回复
找开文件看看不就知道了,另外你的数组是怎么定义的?

保存时用的数组下标是1..20
后面读取赋值,比如xjpx0,是21..40,不会越界吗?
liujiawa07 2012-09-06
  • 打赏
  • 举报
回复
跟踪发现,应该赋值给第二组数组变量的值全部赋给第三组变量。
我换了台电脑测试,问题依旧。不是系统问题,应该还是代码问题。
d-ok 2012-09-06
  • 打赏
  • 举报
回复
其中关键部分换成这个试试。
For i:=0 to 64 do begin
j:=strtoint(MF.strings[i]);
case i of
0..19: wjpx0[i+1]:=j;
20..39: xjpx0[i+1-20]:=j;
40..59: sjpx0[i+1-40]:=j;
60..64: dppx0[i+1-60]:=j;
end;
end;
w7 2012-09-06
  • 打赏
  • 举报
回复
回楼上,TStrings有虚函数,所以用子类TStringList.Create
hsfzxjy 2012-09-06
  • 打赏
  • 举报
回复
为什么你MF定义为TStrings而用TStringList.Create?
liujiawa07 2012-09-06
  • 打赏
  • 举报
回复
2楼说的还真有理,但我改成
procedure TForm1.Button2Click(Sender: TObject);
var
MF: TStrings;
begin
If Opendialog1.Execute then begin
MF:= TStringList.Create;
try
MF.LoadFromFile(opendialog1.filename);
//icount:=MF.Count;
For i:=0 to 64 do begin
j:=strtoint(MF.strings[i]);
If i in [0..19] then
wjpx0[i+1]:=j
else if i in [20..39] then
xjpx0[i+1-20]:=j
else if i in [40..59] then
sjpx0[i+1-40]:=j
else if i in [60..64] then
sjpx0[i+1-60]:=j
end;
finally
MF.Free;
end; end;
end;
还不行!
hsfzxjy 2012-09-06
  • 打赏
  • 举报
回复
汗。。所以你越界了
liujiawa07 2012-09-06
  • 打赏
  • 举报
回复
var
Form1: TForm1;
dppx0 : array[1..6] of Integer;
wjpx0,xjpx0,sjpx0 : array[1..20] of Integer;
i,j,aa:integer;
hsfzxjy 2012-09-06
  • 打赏
  • 举报
回复
顶楼上

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧