标题:请教搜索无重复的行
只看楼主
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
已结贴  问题点数:16 回复次数:36 
请教搜索无重复的行
先生好,我有一段代码用来筛选无重复的行(有一个原表 ,312行10列,用代码筛选出以某行为标准的几行中无重复数据的),原来以为已可筛选了,但今天无意中将原表的行的次序(整行交换位置)交换后竟然筛选后的结果不一样了,请先生抽空指点,谢谢了(原表是312行10列,代码筛选后无重复数据的且有10行的“行块”有10块,但当原表中的前19行剪贴到文件尾后,搜索结果中无重复数据且有10行的“行块”只有一块了)
)

请教.rar (13.22 KB)

这个问题的逻辑关系有点复杂.rar (3.17 KB)


[此贴子已经被作者于2018-7-22 19:29编辑过]

搜索更多相关主题的帖子: 搜索 重复 代码 筛选 数据 
2018-07-22 19:21
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:8 
程序代码:
CLOSE DATABASES
SET SAFETY OFF
t1=SECONDS()
USE 比较后
ZAP
SELECT * FROM 原表 INTO CURSOR tt
SELECT 原表
LOCAL aaa[1,11]
SCAN
     SCATTER TO aa
     =ACOPY(aa,aaa)
     aaa[1,11]="以第"+TRANSFORM(RECNO())+"条记录为准"
     INSERT INTO 比较后 FROM ARRAY aaa
     =bj(ALEN(aa),@aa)
ENDSCAN
MESSAGEBOX("共用时:"+TRANSFORM(SECONDS()-t1)+" 秒")
SELECT 比较后
n=0
* 统计记录数
FOR i=RECCOUNT() TO 1 STEP -1
    GO i
    IF NOT "以"$循环记录
        n=n+1
    ELSE 
        REPLACE RECORD i 循环记录 WITH 循环记录-",有"-TRANSFORM(n+1)-"条记录"
        n=0
    ENDIF  
ENDFOR
BROWSE &&FOR LEFT(循环记录,2)=="以" AND "有10条"$循环记录

* 自定义函数 
FUNCTION bj(n,arr)
    cStr=""
    FOR ii=1 TO n
        cStr=cStr+IIF(EMPTY(cStr),""," ")+PADL(arr[ii],3,"0")
    ENDFOR
    SELECT tt
    LOCAL bbb[1,11]
    SCAN
        oK=.F.
        SCATTER TO bb
        FOR ii=1 TO n
            IF AT(PADL(bb[ii],3,"0"),cStr)>0
                oK=.T.
                EXIT
            ENDIF 
        ENDFOR
        IF ok=.F.
            =ACOPY(bb,bbb)
            bbb[1,11]="第 "+TRANSFORM(RECNO("tt"))+" 条"
            INSERT INTO 比较后 FROM ARRAY bbb
            * 不相同的数据保存在字符串中
            FOR ii=1 TO n
                cStr=cStr+IIF(EMPTY(cStr),""," ")+PADL(bb[ii],3,"0")
            ENDFOR 
        ENDIF 
    ENDSCAN
ENDFUNC 


[此贴子已经被作者于2018-7-23 19:17编辑过]


坚守VFP最后的阵地
2018-07-22 21:08
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
本问题的核心是将数据生成字符串,再用后面行记录的每个数据与字符串比较。

坚守VFP最后的阵地
2018-07-22 21:23
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 3楼 sdta
先生您好,您的代码我试了下,还是有问题,运行后无重复的10行的“块”只有一块,若把原表中的前19行剪贴到文件尾时,运行的结果则无重复的10行的“块”就有十块了,请指教,谢谢(不知我第二个附件中关于本题的要求是否会词不达意)

[此贴子已经被作者于2018-7-22 22:01编辑过]

2018-07-22 21:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
附件中的意思不是太明白
我只是根据 比较后.DBF 的结果写的代码
最好举例说明

坚守VFP最后的阵地
2018-07-22 22:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
通过文字沟通是很困难的,只有通过语言交流才能表达清楚意思。

坚守VFP最后的阵地
2018-07-22 22:20
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
比较后.DBF 中的结果是否正确。如果不正确,给个正确的。

坚守VFP最后的阵地
2018-07-22 22:22
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 

我的代码中的结果,自己看吧

坚守VFP最后的阵地
2018-07-22 22:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
不管你的记录是以何种方式显示的,我的代码应该是没有问题的。

坚守VFP最后的阵地
2018-07-22 22:30
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 9楼 sdta
首先感谢先生的耐心指导,但我还有一个疑问,就是若将压缩包中的“原表.dbf”中的最后19行剪贴到“原表.dbf”的头部(最顶端),则运行后的“有9条记录”的块只有一处了,照理也应该有10处啊,谢谢先生(以下附件是剪贴后的原表,只是最后19行剪贴到了头部,其他都没改变,请先生替换原表后再运行下,谢谢)
原表.rar (3.22 KB)
2018-07-23 06:55



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




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

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