![]() |
#2
吹水佬2021-09-20 15:15
|
在“动态字段排序”帖的“获取最大、次最大”代码中,解决了运行速度问题,谢谢!
但标注时字段名时遇到了小问题:
代码条件中,是在遇上第1个字段符合标注条件后,就退出该轮字段的循环,进入下一个100行。
在下表中两个字段都符合条件,却标的是最后一个字段名:
只有本站会员才能查看附件,请 登录

USE bb IN 0
USE pmax IN 0
SELECT pmax
BLANK FIELDS mmax ALL
SELECT bb
COPY TO ARRAY a100 NEXT 100 && 第1个100行
pmax(@a100)
SELECT bb
SKIP
SCAN REST
** 下一个100行
SCATTER TO a1 && 取bb一行存入a1
ADEL(a100,1) && 删除a100第1行
ACOPY(a1, a100, 1, -1, AELEMENT(a100,100,1)) && 将a1写入a100最后一行
pmax(@a100)
ENDSCAN
SELECT * FROM pmax
RETU
FUNCTION k2k3(k2,k3,n1) && 最大值、最次大值
IF n1 > k2
k2 = n1
ELSE
IF n1 > k3
k3 = n1
ENDIF
ENDIF
ENDFUN
FUNCTION pmax(a100)
FOR nCol=2 TO ALEN(a100,2)
n1 = 0
k2 = 0
k3 = 0
krow = 0 &&非空行数
FOR nRow=1 TO ALEN(a100,1)
IF EMPTY(a100[nRow,nCol])
n1 = n1 + 1
ELSE
k2k3(@k2,@k3,@n1)
n1 = 0
krow = krow + 1
ENDIF
ENDFOR
k1 = n1 &&列最后行的值
k2k3(@k2,@k3,@n1)
IF k1==k2 AND k1>3 AND krow>20 AND k1<7 &&求第2大值,与最大值比较
IF k2-k3=1 &&在pmax对应行标注(条件有修改)
SELECT pmax
GO a100[100,1]
REPLACE mmax WITH "MMAX"
REPLACE maxm WITH FIELD(nCol,"bb") &&标注此列字段名
EXIT
ENDIF
ENDIF
ENDFOR
ENDFUNC
USE pmax IN 0
SELECT pmax
BLANK FIELDS mmax ALL
SELECT bb
COPY TO ARRAY a100 NEXT 100 && 第1个100行
pmax(@a100)
SELECT bb
SKIP
SCAN REST
** 下一个100行
SCATTER TO a1 && 取bb一行存入a1
ADEL(a100,1) && 删除a100第1行
ACOPY(a1, a100, 1, -1, AELEMENT(a100,100,1)) && 将a1写入a100最后一行
pmax(@a100)
ENDSCAN
SELECT * FROM pmax
RETU
FUNCTION k2k3(k2,k3,n1) && 最大值、最次大值
IF n1 > k2
k2 = n1
ELSE
IF n1 > k3
k3 = n1
ENDIF
ENDIF
ENDFUN
FUNCTION pmax(a100)
FOR nCol=2 TO ALEN(a100,2)
n1 = 0
k2 = 0
k3 = 0
krow = 0 &&非空行数
FOR nRow=1 TO ALEN(a100,1)
IF EMPTY(a100[nRow,nCol])
n1 = n1 + 1
ELSE
k2k3(@k2,@k3,@n1)
n1 = 0
krow = krow + 1
ENDIF
ENDFOR
k1 = n1 &&列最后行的值
k2k3(@k2,@k3,@n1)
IF k1==k2 AND k1>3 AND krow>20 AND k1<7 &&求第2大值,与最大值比较
IF k2-k3=1 &&在pmax对应行标注(条件有修改)
SELECT pmax
GO a100[100,1]
REPLACE mmax WITH "MMAX"
REPLACE maxm WITH FIELD(nCol,"bb") &&标注此列字段名
EXIT
ENDIF
ENDIF
ENDFOR
ENDFUNC
请指教,谢谢!
[此贴子已经被作者于2021-9-20 14:31编辑过]