标题:动态字段如何排序
只看楼主
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
我已在代码段中添加了补充说明
2021-09-18 18:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用fdqzy在2021-9-18 18:58:10的发言:

我已在代码段中添加了补充说明

IF k1=k2 AND k1>0 AND krow>20 AND k1<7 &&求第2大值,与最大值比较
这句是首要条件,意思是:
每次第100行的列值k1==列最大值k2 and 列中非空的个数krow>20 and 每次第100行的列值k1<7
即:k1<>k2 或 krow<21 或 k1>6 该列就不用处理了?


[此贴子已经被作者于2021-9-18 20:35编辑过]

2021-09-18 19:34
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
以下是引用吹水佬在2021-9-18 19:34:22的发言:


IF k1=k2 AND k1>0 AND krow>20 AND k1<7 &&求第2大值,与最大值比较
这句是首要条件,意思是:
每次第100行的列值k1==列最大值k2 and 列中非空的个数krow>20 and 每次第100行的列值k1<7
即:k1<>k2 或 krow<21 或 k1>6 该列就不用处理了?

是这意思,统计结果与所发代码统计结果相同即是。
2021-09-18 20:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
没有校对,不知算法对不对

程序代码:
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
RETURN

FUNCTION k2k3(k2,k3,n1)  && 最大值、最次大值
    IF n1 > k2
        k2 = n1
    ELSE
        IF n1 > k3
            k3 = n1
        ENDIF 
    ENDIF 
ENDFUNC

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>0 AND krow>20 AND k1<7     &&求第2大值,与最大值比较
            IF INLIST(k2-k3,1,2) &&在pmax对应行标注
                SELECT pmax
                GO a100[100,1]
                REPLACE mmax WITH "MMAX"
                EXIT 
            ENDIF 
        ENDIF 
    ENDFOR
ENDFUNC
2021-09-18 22:09
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
太麻烦了,谢谢!
恕我愚昧,FUNCTION 如何调用?
2021-09-18 23:23
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
调用方法懂了,谢谢!
2021-09-18 23:33
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
思路与我完全不一样,运行速度快多了,多多学习!

[此贴子已经被作者于2021-9-18 23:41编辑过]

2021-09-18 23:39
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
再请教一下,在符合标注条件时,如何获取bb列字段名?
2021-09-19 05:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用fdqzy在2021-9-19 05:56:01的发言:

再请教一下,在符合标注条件时,如何获取bb列字段名?

FIELD(nCol,"bb")
2021-09-19 08:47
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
谢谢!
2021-09-19 10:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506895-1-1.html




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

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