| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3261 人关注过本帖
标题:请教二表随机整行替换代码中的一个错误提示
取消只看楼主 加入收藏
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
收藏
已结贴  问题点数:20 回复次数:20 
请教二表随机整行替换代码中的一个错误提示
先生们好,有A、B二表都是10行6列,现在随机的从B表中取几整行去替换A表中相对应的整行,搞了点代码,但在运行中总是提示“记录超出范围”,检查了多次,总觉得记录没超出范围,请先生指点,谢放,。
ACTIVATE SCREEN
CLEAR
CLOSE DATABASES
SET DEFAULT TO "d:\请教"
use  交换结果记录表.dbf alias a in 0
USE b IN 0

SET SAFETY OFF
********************************************************************************
*A表中的任一行与B表中的行只交换一行
    * 本块应该有10种可能性,共有100行

*A表中的任二行与B表中的行只交换二行
    * 本块应该有9+8+...+2+1种即45种可能性,共有450行
   
*A表中的任三行与B表中的行只交换三行
    * 本块应该有8+7+...+2+1种即36种可能性,共有360行
   
*A表中的任四行与B表中的行只交换四行
    * 本块应该有7+...+2+1种即28种可能性,共有280行   

*A表中的任五行与B表中的行只交换五行
    * 本块应该有6+5+...+2+1种即21种可能性,共有210行   
   
*A表中的任六行与B表中的行只交换六行
    * 本块应该有5+4+...+2+1种即15种可能性,共有150行   
   
*A表中的任七行与B表中的行只交换七行
    * 本块应该有4+3+2+1种即10种可能性,共有100行   
   
*A表中的任八行与B表中的行只交换八行
    * 本块应该有3+2+1种即6种可能性,共有60行
   
*A表中的任九行与B表中的行只交换九行
    * 本块应该有2+1种即3种可能性,共有30行   
   
*A表中的十行与B表中的行交换十行
    * 本块应该有1种可能性,共有10行

LOCAL 随机行数值
随机行数值 = 获取一个随机整数值(1,10)

LOCAL 随机行号串A, 随机行号串B
随机行号串A = 获取任意一组数字(1,10,随机行数值)
随机行号串B = 获取任意一组数字(1,10,随机行数值)
ACTIVATE SCREEN
?随机行数值, ": " , 随机行号串A,随机行号串B

LOCAL m.i
LOCAL m.nA, m.nB

FOR m.i = 1 TO 随机行数值
    m.nA = VAL(GETWORDNUM(随机行号串A,m.i,","))
    m.nB = VAL(GETWORDNUM(随机行号串B,m.i,","))
   
    ? m.i, "将B表的行【" + ALLTRIM(STR(m.nB)) + "】替换到表A的行【" + ALLTRIM(STR(m.nA)) + "】"
   
    SELECT b
    GOTO m.nB
    SCATTER MEMVAR
   
    SELECT a
    ? "       m.nA=" ,m.nA
    GOTO m.nA
    GATHER MEMVAR
NEXT

FUNCTION 获取一个随机整数值()
    LPARAMETERS 最小值,最大值
   
    LOCAL m.n
    m.n = ROUND(RAND() * (最大值-最小值+1),0)
   
    IF m.n = 0
        m.n = m.n + 1
    ENDIF
   
    m.n = 最小值 + m.n -1
    IF m.n<最小值
        m.n = 最小值
    ENDIF
    IF m.n>最大值
        m.n=最大值
    ENDIF
   
    RETURN m.n
ENDFUNC

FUNCTION 获取任意一组数字()
    LPARAMETERS 开始行,结束行, 个数
   
    LOCAL 行数
    行数 = 结束行 - 开始行 + 1

    LOCAL ARRAY 行号数组(行数,2)
    LOCAL m.n
   
    FOR m.n = 1 TO 行数
        行号数组(m.n,1) = 开始行 + m.n - 1
        行号数组(m.n,2) = RAND()
   
        ACTIVATE SCREEN
        ?m.n, 行号数组(m.n,1), 行号数组(m.n,2)
    NEXT
   
    ?"=========================================A"

    LOCAL m.i, m.j
    LOCAL m.A, m.B
    LOCAL m.T1, m.T2
   
    FOR m.i = 1 TO 行数 -1
        m.A = 行号数组(m.i,2)
        
        FOR m.j = m.i + 1 TO 行数
            m.B = 行号数组(m.j,2)
            
            IF m.A > m.B
                m.T1 = 行号数组(m.i,1)
                m.T2 = 行号数组(m.i,2)
                行号数组(m.i,1) = 行号数组(m.j,1)
                行号数组(m.i,2) = 行号数组(m.j,2)
                行号数组(m.j,1) = m.T1
                行号数组(m.j,2) = m.T2
               
                m.A = 行号数组(m.i,2)
            ENDIF
            
        NEXT
    NEXT
   
    ?"=========================================B"
   
    FOR m.n = 1 TO 行数
        ACTIVATE SCREEN
        ?m.n, 行号数组(m.n,1), 行号数组(m.n,2)
    NEXT
   
    LOCAL m.s
    m.s = ""
   
    FOR m.n = 1 TO 个数
        m.s = m.s + "," + ALLTRIM(STR(行号数组(m.n,1)))
    NEXT
   
    m.s = SUBSTR(m.s,2)
    ?"=========================================C"
    ?""
    RETURN m.s   
   
ENDFUNC

程序及A、B表等在压缩包中
请教.rar (4.12 KB)
搜索更多相关主题的帖子: 表中 LOCAL 行数 随机 数组 
2022-02-13 20:38
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 2楼 sdta
先生早上好,我将这行  use  交换结果记录表.dbf alias a in 0
                改成  use  交换结果记录表.dbf alias a1 in 0
运行还是提示记录超出
2022-02-14 08:23
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 7楼 吹水佬
先生是的,是随机的从B表中取几行(如在B表中随机的取第2、5、6、8行去替换A表中的第2、5、6、8行【整行数字替换】)并将替换后的结果记录到“替换结果记录表.dbf”中
这时替换结果记录表中的行的次序变成
a1、b2、a3、a4、b5、b6、a7、b8、a9、a10的整行的数字了,谢谢先生
2022-02-14 15:06
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 9楼 吹水佬
最好是要有可选择多次的,谢谢先生
2022-02-14 15:48
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 11楼 吹水佬
打个比方,共选择5次,这5次的总的情况是有重复的可能,但第一次、第二次、、、、这样每一次中是不会有重复的
(每次的替换时可用文字来分隔,如第一次交换结果如下、第二次交换结果如下、、、)
2022-02-14 16:12
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 13楼 吹水佬
具体例子如下
A                            B                            随机的B中的行替换对应的A中的行记录表                    
列1    列2    列3    列4    列5    列6        列1    列2    列3    列4    列5    列6        列1    列2    列3    列4    列5    列6
280    56    182    172    147    30        9    233    107    117    142    259        280    56    182    172    147    30
284    60    158    123    202    40        5    229    131    166    87    249        5    229    131    166    87    249
2    238    95    138    150    244        287    51    194    151    139    45        2    238    95    138    150    244
121    203    217    47    246    33        168    86    72    242    43    256        168    86    72    242    43    256
29    126    195    227    49    241        260    163    94    62    240    48        260    163    94    62    240    48
93    129    173    218    253    1        196    160    116    71    36    288        93    129    173    218    253    1
25    63    113    190    237    239        264    226    176    99    52    50        25    63    113    190    237    239
271    102    89    85    69    251        18    187    200    204    220    38        271    102    89    85    69    251
278    28    162    96    91    212        11    261    127    193    198    77        11    261    127    193    198    77
266    24    179    100    82    216        23    265    110    189    207    73        23    265    110    189    207    73

以上是B中的第2、4、5、9、10行替换了A中对应的行(A的其他的行保持不变)
2022-02-14 19:15
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 14楼 fdxxhjc
更直观的例子
具体例子.rar (6.67 KB)
2022-02-14 19:17
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 16楼 吹水佬
哦,先生我是这样设想的,第一次产生了5个随机数对应了5个行号即交换了这5个行号的5行,第二次若产生了7个随机数,则交换这7个随机数所对应行的数字,以此类推,谢谢先生
在1--10之间的随机数有大有小,即交换的行数有多有少了


[此贴子已经被作者于2022-2-14 20:39编辑过]

2022-02-14 20:37
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 18楼 吹水佬
哦,谢谢先生,按您的逻辑我想一想,谢谢
2022-02-14 21:03
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 20楼 laowan001
只10条的话是不会很多,从遍历的角度讲也不多的,但每一次替换时都是以原来的A为标准被B的随机几行替换了,所以相似度也不会越来越高的


[此贴子已经被作者于2022-2-15 08:08编辑过]

2022-02-15 08:05
快速回复:请教二表随机整行替换代码中的一个错误提示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023750 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved