标题:请教搜索无重复的行
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:8 
这样可否:
USE 原表 ALIAS 原表 IN 0
USE 比较后 ALIAS 比较后 IN 0
SELECT * FROM 比较后 WHERE .F. INTO CURSOR tmp_比较后 READWRITE
SELECT 比较后
ZAP
FOR nRecno=1 TO RECCOUNT("原表")
    SELECT tmp_比较后
    ZAP
    SELECT 原表
    GO nRecno
    SCATTER TO arr_recno
    INSERT INTO tmp_比较后 FROM ARRAY arr_recno
    GO TOP
    SCAN
        IF RECNO() != nRecno
            SCATTER TO arr_recno
            SELECT 列1,列2,列3,列4,列5,列6,列7,列8,列9,列10 FROM tmp_比较后 INTO CURSOR tmp READWRITE
            INSERT INTO tmp FROM ARRAY arr_recno
            SELECT * FROM tmp INTO ARRAY arr
            n = ALEN(arr)
            DIMENSION arr[n]
            ASORT(arr)
            ai = arr[1]
            FOR i=2 TO n
                IF arr[i]==ai
                    EXIT
                ELSE
                    ai = arr[i]
                ENDIF
            ENDFOR
            IF i > n
                INSERT INTO tmp_比较后 FROM ARRAY arr_recno
                REPLACE 循环记录 WITH "  第"+TRANSFORM(RECNO("原表"))+"条" IN "tmp_比较后"
            ENDIF
        ENDIF
    ENDSCAN
    GO TOP IN "tmp_比较后"
    REPLACE 循环记录 WITH "以第"+TRANSFORM(nRecno)+"为准,有"+TRANSFORM(RECCOUNT("tmp_比较后"))+"条" IN "tmp_比较后"
    INSERT INTO 比较后 SELECT * FROM tmp_比较后
ENDFOR
SELECT * FROM 比较后

2018-07-23 10:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 10楼 fdxxhjc
仔细对比了前后两个原表.DBF,以后发的原表.DBF为基础,只显示有10条记录的块为1块是正确的。
因为表中记录前后顺序发生了变化,不同记录不同列的值也不一样了,所以最后组合的结果也是不一样的。
第一个发的原表.DBF称为原表1.DBF
第二个发的原表.DBF还称为原表.DBF,本表第20条记录是原表1.DBF中的第一条记录,当以第20条记录作为标准时,首先要和本表的第一条记录比较,如果这两条记录中没有相同的数据,此时这两条记录符合没有重复数据的标准,否则不符合没有重复数据的标准。
因为文字表达能力有限在这里就不多做说明了。

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


坚守VFP最后的阵地
2018-07-23 12:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
如果把原表.DBF的后10条记录放在本表的第一条记录的前面,又是不同的结果。

坚守VFP最后的阵地
2018-07-23 13:18
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 13楼 sdta
先生是的,行的先后次序(整行或者说该行中10个数学的前后次序不改变)改变后“无重复的10行的块”的块数是会发生变化,但当我将行的前后改变较大时(譬如将行的次序随机排列后)怎么会“无重复的10行的块”不出现的情况呢,这是否说明我的代码有问题或者说我的要求与文字表达有偏差
2018-07-23 14:39
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 11楼 吹水佬
先生我运行了您的代码,但也出现“无重复10行的块”无解的情况
2018-07-23 14:40
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 14楼 fdxxhjc
为此我把这个问题的思路要求以文字的形式再疏理了下并贴上:

    逻辑要求再说明如下:总的要求是以每一行为标准与“原表”的312行都作一次比对。
第一轮(整个运行过程相当于有312轮):
    第一轮的第1步:以第一行为标准,与第一行比对有重复(自比对有重复即回避,以下同),第一行与第二行作比对,比对的结果有二种可能,第一种是:第一行中的10个数与第二行中的10个数均无重复时,则第二行符合要求;第二种是:第一行中的10个数与第二行中的10个数有一对及以上的重复时则第二行不符合要求。
    第一轮的第2步:当第一步下来第二行若是符合要求的,则以第一第二行共20个数为标准与第三行比对(当第一步下来若第二行不符合要求,则只有第一行的10个数与第三行比对)。
    第一轮的第3步:这步中作为标准的数可能有30个(前二次比对下来都符合要求)也有可能是20个(前二步中其中有一步符合一步不符合)也有可能还只有10个(前二步下来均不符合要求),此时以30个数或20个数或10数为标准与第四行进行比对,直至以前面311行比对的结果为标准与第312行进行比对,并将最后符合要求的各行写入“比较后”。
第二轮:以第二行为标准,先与第一行比对,可能性与第一轮相似,与第二行自相比对即回避,再将比对的结果为标准与第三行进行比对,直到与第312行进行比对,并将比对结果写入“比较后”。
……
第三佰十二轮:即以312行为标准与第一行进行比对,直至与312比对,至此运行结束。
2018-07-23 14:43
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 15楼 fdxxhjc
为此我把这个问题的思路要求以文字的形式再疏理了下并贴上:

    逻辑要求再说明如下:总的要求是以每一行为标准与“原表”的312行都作一次比对。
 第一轮(整个运行过程相当于有312轮):
    第一轮的第1步:以第一行为标准,与第一行比对有重复(自比对有重复即回避,以下同),第一行与第二行作比对,比对的结果有二种可能,第一种是:第一行中的10个数与第二行中的10个数均无重复时,则第二行符合要求;第二种是:第一行中的10个数与第二行中的10个数有一对及以上的重复时则第二行不符合要求。
    第一轮的第2步:当第一步下来第二行若是符合要求的,则以第一第二行共20个数为标准与第三行比对(当第一步下来若第二行不符合要求,则只有第一行的10个数与第三行比对)。
    第一轮的第3步:这步中作为标准的数可能有30个(前二次比对下来都符合要求)也有可能是20个(前二步中其中有一步符合一步不符合)也有可能还只有10个(前二步下来均不符合要求),此时以30个数或20个数或10数为标准与第四行进行比对,直至以前面311行比对的结果为标准与第312行进行比对,并将最后符合要求的各行写入“比较后”。
 第二轮:以第二行为标准,先与第一行比对,可能性与第一轮相似,与第二行自相比对即回避,再将比对的结果为标准与第三行进行比对,直到与第312行进行比对,并将比对结果写入“比较后”。
……
第三佰十二轮:即以312行为标准与第一行进行比对,直至与312比对,至此运行结束。
2018-07-23 14:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用fdxxhjc在2018-7-23 14:40:36的发言:

先生我运行了您的代码,但也出现“无重复10行的块”无解的情况

出现“无重复10行的块”什么意思?
2018-07-23 15:55
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 18楼 吹水佬
因有些时候运行下来“无重复的行中行数最多的达10行”
而有些时候运行下来“无重复的行数为10行的”没有出现,此时即为“无重复10行的块”了
列1    列2    列3    列4    列5    列6    列7    列8    列9    列10    循环记录
2    58    62    49    94    93    34    8    54    51    以第1为准,有10条
19    77    63    18    41    39    100    85    11    52          第133条
70    15    82    14    27    23    36    64    86    88          第154条
1    3    75    78    42    38    83    57    47    81          第175条
66    65    61    98    35    31    45    7    87    10          第193条
74    4    59    40    91    90    24    56    12    55          第225条
73    67    79    25    21    33    26    80    92    9          第245条
60    69    6    96    95    30    28    48    20    53          第269条
68    71    5    43    37    29    97    16    50    89          第290条
72    76    13    44    22    99    32    84    46    17          第312条


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

2018-07-23 16:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
“以第1为准,有10条”,这是按要求得到的结果,这种情况又是什么问题?
2018-07-23 16:11



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




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

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