请教二表随机整行替换代码中的一个错误提示
先生们好,有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)