我的memo中有1000行数据,每行都是形如 1,2,3,4,5,6,7 这样7个一组的数字,现在我想随机从中取出500行,怎么做?我是新手,请最好代码提示?谢谢

解决方案 »

  1.   


    while num=500 do
    begin
     if 随机数 小于=1000随机数 then //memo1的行
     begin
       // 记录已经抽取随机数 用个数组记录已经被抽取的行。
       if 已经抽取的行就排除,避免重复抽取到相同的行  then
       begin
       memo2.lines.add();
       inc(num); //抽到了一个就加1,不然继续下一个循环,取随机。
       end; 
     end;
    end;
    一、常用的获取真正随机数的代码我们都知道在Delphi中获取随机数的函数是Random(),比如我们要取得1-100的随机数,一般是使用 Random(100)+1,但使用这个函数取的随机数,其实只是个伪随机数,这是因为Random函数是根据随机种子采用固定算法取得的随机数,在程序运行中会导致每次运行会取得与上次运行相同的数字。为此,Delphi提供了重置随机种子的语句Randomize,这样在每次使用Random之前都运行一次Randomize,就可以取得真正的随机数。代码参考如下:Randomize;
    Result:=Random(100)+1;//Random(100)所取得的值为>=0 而<100的值二、我用的获得真正随机数的代码这个代码其实是在上面的代码变化而来的,也许有人会觉得似乎没有必要,但这只是我探求更加随机数的方法,有点类似C语言以当前时间重置随机数的方法,我的思路是以当前时间与较大范围内的随机数相加作为弧度计算正弦值,这样取整再获取所需范围的随机数。但这里需注意的是,由于弧度取正弦,这个值与理论上-1<=x<=1还是有差别的,可以说其值在0<|x|<1范围内。我的代码如下:Randomize;
    Result:=Trunc(Int(Abs(Sin(Integer(SecondOfTheYear(Now))+Random(10000))*100))+1);
      

  2.   

    1.Randomize只需要调用一次。
    2.random就够了。
    3.num := 0;
      While num < 500 do
      

  3.   

    两个TStringlist 一个原数据 一个存数据
    然后原数据随机取一行存入stringlist中 就删除原数据中一行
    判断存数据的数组够不够500即可
      

  4.   

    随机取500行,其它的从memo中删除
      

  5.   

    你先在1000以内取500个不同的随机数放到数组中,然后对数组用for循环 ,对memo的行进行提取不久ok了