编写软件时遇到了困难.请各位帮忙(我的分剩的不多了.帮帮忙吧~~)(10分)

  • 主题发起人 主题发起人 我饿了
  • 开始时间 开始时间

我饿了

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己编写了一个Email地址生成软件.
程序大概如下.在FlatEdit1中输入一个单词后按下button1后,程序会将Edit1中的那个单词
+@+domainname.txt中的一行写在mailaddress.txt文件中.程序的button1click源码如下:
procedure TForm1.FlatButton1Click(Sender: TObject);
var
sl1,sl2:TStringlist;
i:integer;
begin
sl1:=tstringlist.create;
SL1.LoadFromFile('domainname.txt');
sl2:=tstringlist.create;
sl2.loadfromfile('mailaddress.txt');
for i:=0 to sl1.count-1 do
sl1.strings[sl2.count+i]:=FlatEdit1.text+'@'+sl1.Strings;
sl1.savetofile('mailaddress.txt');
sl1.free;
sl2.free;
end;
编译成功.运行后输入第一个单词时正常,当输入第二个时就会弹出list index out of bounds(
mailaddress.txt的现有行数)
请问我应当怎样解决?谢谢了~~~~
 
——sl2.count+i?????

我想你的问题在这儿。哈哈
 
这样改一下:
procedure TForm1.FlatButton1Click(Sender: TObject);
var
sl1:TStringlist;
i:integer;
begin
sl1:=tstringlist.create;
SL1.LoadFromFile('C:/My Documents/fa.txt');
for i:=0 to sl1.count-1 do
sl1.strings:=FlatEdit1.text+'@'+sl1.Strings;
sl1.savetofile('C:/My Documents/fa1.txt');
sl1.free;

end;
 
但是这样做的话会将C:/My Documents/fa1.txt内原有的东西覆盖.不是吗?
 
跟踪一下这一句:
sl1.strings[sl2.count+i]:=FlatEdit1.text+'@'+sl1.Strings;
 
改:sl1.strings[sl2.count+i-1]:=FlatEdit1.text+'@'+sl1.Strings;
~~~~~~~~~~~~~
//但是这样做的话会将C:/My Documents/fa1.txt内原有的东西覆盖.不是吗?
不会呀,sl1.strings 的最后一行就是 sl1.strings[sl1.count-1]
当然如果sl1和sl2的行数一样的话,sl1.strings[sl2.count+i-1]也是sl1的最后一行
 
beta,我是说joove的方法会覆盖的.
大家能不能说出具体错误的位置在哪儿?应该如何改?
 
想了好久始终没有想明白.
帮帮我吧~
谢谢!!!!!
 
看:sl1.strings[sl2.count+i]:=FlatEdit1.text+'@'+sl1.Strings;
如果sl1有10行;sl2有100行,那么就是

sl1.strings[100+i]:=....
你在向没有的字符串赋值。当然要超出范围了。
可以这样试试:
sl2.add(flatedit1.text+.....);
sl2.savetofile(..);
 
改成这个样子:

procedure TForm1.FlatButton1Click(Sender: TObject);
var
sl1, sl2: TStringlist;
i: integer;
begin
sl1 := tstringlist.create;
SL1.LoadFromFile('domainname.txt');
sl2 := tstringlist.create;
sl2.loadfromfile('mailaddress.txt');

for i := 0 to sl1.count - 1 do
sl2.Add(FlatEdit1.text '@' + sl1);

sl2.savetofile('mailaddress.txt');
sl1.free;
sl2.free;
end;
 
后退
顶部