文件读写速度问题,请高手相助(50分)

  • 主题发起人 主题发起人 peerson
  • 开始时间 开始时间
十分感谢 QQ在线 的帮助,我不太会操作静态数组,下面是我的全部组合过程,有空的话帮忙优化一下,正发愁呢~~~这是一个彩票组合过程,号球多的时候,速度很不理想,见下代码:
procedure number_cop(number_str:string;m,n:integer);
var
i,j,k,l,w,count:integer;
number:array[0..49,0..1] of string;
findfirst,num_end,swap:bool;
out_str:string;
begin
for i:=0 to m-1 do
begin
number[1]:='0';
number[0]:=trim(copy(number_str,3*i+1,2)); //取得给定的号码
end;
out_str:=''; //初始化第一个组合串
for i:=0 to n-1 do
begin
number[1]:='1';
out_str:=out_str+' '+number[0];
end; //第一个组合
// writeln(tmp_file,trim(out_str)); //将第一个组合写入文件
num_end:=false;
count:=1; //组合数置1,因为第一个组合已经产生

while not num_end do
begin
out_str:='';
findfirst:=false;
swap:=false; //标志复位
for i:=0 to m-1 do
begin

if (not findfirst)and (number[1]='1') then
begin
k:=i; //k记录下扫描到的第一个数
findfirst:=true; //设置标志
end;
if(number[1]='1')and (number[i+1][1]<>'1') then //从左到右扫描第一个“10”组合
begin
number[1]:='0';
number[i+1][1]:='1';
swap:=true; //设置交换标志
for l:=0 to i-k-1 do
number[l][1]:=number[k+l][1];
for l:=i-k to i-1 do
number[l][1]:='0'; //交换后将之前的“1”全部移动到最左端
if(k=i)and (i+1=m-n)then //如果第一个“1”已经移动到了m-n的位置,说明
//这是最后一个组合了。
num_end:=true;
end;
if(swap) then //交换一次后就不用继续找“10”组合了
break;

end;
count:=count+1;
for w:=0 to m-1 do
begin
if number[w][1]='1' then
out_str:=out_str+' '+number[w][0];
end;

//此处应将out_str写入文件

end;

end;
 
感谢大家的帮助,bjdribllec 和 QQ在线 的办法都不错,拟作如下积分分配,以示谢意!
bjdribllec 20分
QQ在线 30分

如有不同意见,请提出,今天18:00前分配了
再次感谢大家的热心帮助!!
与此相关的另外一个问题,恳请大家指导:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2553697
 
没我的分?告诉你好办法你不用,算了,下次不说了
 
回 HAZL:
您提供的思路我知道是不错的,但偶是超级菜鸟,没有实例根本不知道怎么去弄,所以很抱歉啦,如果能帮我解决与此相关的大文件读入再显示到stringgrid或者richedit的快速办法,那个问题的分就全给你了[:)]
 
接受答案了
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部