| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3056 人关注过本帖
标题:动态字段如何排序
只看楼主 加入收藏
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
我已在代码段中添加了补充说明
2021-09-18 18:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册: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
等 级:新手上路
帖 子:368
专家分: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
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册: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
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
太麻烦了,谢谢!
恕我愚昧,FUNCTION 如何调用?
2021-09-18 23:23
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
调用方法懂了,谢谢!
2021-09-18 23:33
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
思路与我完全不一样,运行速度快多了,多多学习!

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

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

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

FIELD(nCol,"bb")
2021-09-19 08:47
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
谢谢!
2021-09-19 10:17
快速回复:动态字段如何排序
数据加载中...
 
   



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

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