不同情况下运行的结果不一样,郁闷中~~~~~~~~

tishineq 2004-01-14 09:39:55
用stringgrid控件读取文本文件,stringgrid与文本文件的行号和列号一一对应。
文本文件内容为
a,1
b,2
c,3
对应stringgrid有三行两列,6个cell,逗号作为分隔符。
现有一个listbox,items如下,item项包含文本文件第一列的内容。
a
b
c
d
e

要求
选择listbox中的一个item,点击按钮,按钮过程为
如果选中的item与stringgrid第一列的某一行(也即文本文件的对应值)相等,则修改将此行修改,例如,选中b,因stringgrid的第2行为b,则将此行修改为
"b,新值(取自label.caption的内容)"
如果选中的item在stringgrid中无对应项,则添加
如,选中e,则在文本文件中新加
"e,新值(取自label.caption的内容)"

现在的问题是
程序在运行时(中途不关闭),以上功能都可实现。但是在程序退出,再重新运行时,对于选中的item在stringgrid中有对应项的情况会进行添加而不是修改操作!!


======================
附代码(文本文件名此处为评分汇总.file)

procedure TForm1.Button1Click(Sender: TObject);
var
onerow:string;
statistics:tstringlist;
rownum:integer;
begin
statistics:=tstringlist.Create;
onerow:=listbox1.items[listbox1.itemindex]+label1.caption;
//如果不存在评分汇总.file则创建。
if not FileExists('评分汇总.file') then statistics.SaveToFile('评分汇总.file');
statistics.LoadFromFile('评分汇总.file');
for rownum:=0 to statistics.count-1 do
begin
if comparetext(stringgrid1.Cells[0,rownum],listbox1.items[listbox1.itemindex])=0 then
begin
statistics.Strings[rownum]:=onerow;//修改特定行
break;//跳出循环
end
//如果没有和listbox相匹配的项则添加一行
else if rownum=statistics.count-1 then
statistics.add(onerow);
end;
//如果文本文件是空文件,则添加第一行
if statistics.count=0 then statistics.add(onerow);
statistics.SaveToFile('评分汇总.file');
statistics.Free;
end;
...全文
28 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cma123 2004-01-15
  • 打赏
  • 举报
回复
up
dyxfkj 2004-01-15
  • 打赏
  • 举报
回复
dulei115兄的方法不错!加Trim()这是个好习惯!可以处理好多不容易发现的问题!
cma123 2004-01-15
  • 打赏
  • 举报
回复
我试了一下,发现第一次打开程序时,修改操作会变成添加操作。怀疑内存在刚打开和运行时的内容有不同。关注
dulei115 2004-01-15
  • 打赏
  • 举报
回复
随便说说,不知道是不是这个问题:
怀疑是字符串的问题,楼主把每个字符串都加上Trim()去掉前后空格,如:
onerow:=listbox1.items[listbox1.itemindex]+label1.caption;
改为
onerow := trim(listbox1.items[listbox1.itemindex]) + trim(label1.caption);

因为comparetext('abcde','abcde ') <> 0


///////////////////////
是猜的,如果不是就算了!
S.F. 2004-01-15
  • 打赏
  • 举报
回复
UP~~~~~~~~
mingjianzeng2003 2004-01-15
  • 打赏
  • 举报
回复
学习!
mingjianzeng2003 2004-01-15
  • 打赏
  • 举报
回复
学习!
lgqTiger 2004-01-15
  • 打赏
  • 举报
回复
关注!
keyb 2004-01-15
  • 打赏
  • 举报
回复
XIXI,打错了字
ListBox1.Items.LoadFromFIle('评分汇总.file');
如果要处理文本文件中的分隔号问题,把文件装入并处理完后
起码也要
ListBox1.Items.assign(statistics)
这样来一下
dickeybird888 2004-01-15
  • 打赏
  • 举报
回复
//dulei115() 说的应该是对的我还有个疑问:

onerow:=listbox1.items[listbox1.itemindex]+label1.caption;

中的label1.cAPTION不知道干什么用的,///
cma123 2004-01-15
  • 打赏
  • 举报
回复
请教,
ListBox1.item.loadform(xxxxx);
是做什么操作
keyb 2004-01-15
  • 打赏
  • 举报
回复
这些天,因为买房子的事情,折腾得我根本没办法集中精力做任何事情。但凭我的直觉。
看到您的代码中的串表是有两个不同的来源。一个的LISTBOX1中的,另一个是您自己创建的。而在代码里我没有看到任何将之同步起来的语句。
您可以直接用LISTBOX1的串表来维护所有数据。
如:ListBox1.item.loadform(xxxxx);
哎,实在写不下去了。希望能提示您朝着正确的方向调试。对不起!
zzlingaaa 2004-01-15
  • 打赏
  • 举报
回复
为什么不用Ini文件?
ZhuJiaWei 2004-01-15
  • 打赏
  • 举报
回复
好像比较困难哦。
帮你UP

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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