标题:标注字段名问题
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
要求 k1==k2 这个条件,应该不用算那么多
k1是最后的n1,就从最后的第100行起往前算n1就可以,算到非空时就可以结束。
2021-09-21 08:53
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
从测试和统计结果看:
在IF k1==k2 AND k1>0 AND krow>20 AND k1<7条件下,都是k3<k2,没有k3=k2的情况,
但我把  IF INLIST(k2-k3,1,2)
 改成:IF k2=k3
统计结果一样,这样 IF INLIST(k2-k3,1,2)就成多余的条件,
我的意图是在k3<k2的情况下标注,k3=k2就不标注。

可能是我这次提供的bb无这种情况,我把上次的bb试一下看.


[此贴子已经被作者于2021-9-21 10:49编辑过]

2021-09-21 10:35
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
老师:
bb.rar (21.02 KB)

此表放在IF k1==k2 AND k1>0 AND krow>20 AND k1<7,
在IF INLIST(k2-k3,1,2)之前(标注条件前)
测试结果显示无k3=k2的情况,且出现记录超范围的提示。
不满足:在k3<k2的情况下标注,k3=k2就不标注。

这样 IF INLIST(k2-k3,1,2)就成多余的条件,

第一次代码有k3=k2和k3<k2情况

[此贴子已经被作者于2021-9-21 11:11编辑过]

2021-09-21 11:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
k2是连续非空最多的,且按每行计算,k3是紧跟着k2,这样一定是 k2-k3==1,所以k3也是多余算的。

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

k2是连续非空最多的,且按每行计算,k3是紧跟着k2,这样一定是 k2-k3==1,所以k3也是多余算的。

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

经测试:上一次的这段代码有k3=k2 和k3<k2两种情况。
只是标注时字段名不是第1个

满足:在k3<k2的情况下标注,k3=k2就不标注是主要条件

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

2021-09-21 12:11
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
第一次的代码解决了在100行中有一个条件在k3<k2时标注,k3=k2时不标注的问题,只是标注时是最后一个字段名。
如果不管字段名,也算解决了问题.
2021-09-21 12:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 15楼 fdqzy
7楼已解释过
2021-09-21 12:25
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
用上面的bb,用下面的pmax
pmax.rar (6.38 KB)

否则显示记录超范围
2021-09-21 12:26
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
以下是引用吹水佬在2021-9-21 12:25:22的发言:

7楼已解释过

麻烦了,谢谢!
2021-09-21 12:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 16楼 fdqzy
程序代码:
之前的代码
按连续非空整块比对
        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

FUNCTION k2k3(k2,k3,n1)  && 最大值、最次大值
    IF n1 > k2
        k2 = n1
    ELSE
        IF n1 > k3     这个算法有问题,有可能 k2==k3 两个都是老大了
            k3 = n1
        ENDIF 
    ENDIF 
ENDFUN

后来的代码
按非空行比对
        FOR nRow=1 TO ALEN(a100,1)
            IF EMPTY(a100[nRow,nCol])
                n1 = n1 + 1
                k2k3(@k2,@k3,@n1)
            ELSE
                n1 = 0
                krow = krow + 1
            ENDIF
        ENDFOR

FUNCTION k2k3(k2,k3,n1)  && 最大值、最次大值
    IF n1 > k2    有新的最大时
        k3 = k2   原最大变次大
        k2 = n1   新的最大
    ENDIF 
ENDFUNC
2021-09-21 14:52



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




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

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