| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2338 人关注过本帖, 1 人收藏
标题:请大神指导查询,比对问题
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
像是彩票研究?
逐条记录逐个字符比较。

[此贴子已经被作者于2015-10-26 18:37编辑过]


坚守VFP最后的阵地
2015-10-26 18:33
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
上传表看看

坚守VFP最后的阵地
2015-10-26 18:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:2 
“序号”不用对应吧?
这个就是字符比对,应该不难,只是要转换一下才好算点。
2015-10-26 18:44
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
收藏
得分:2 
这类贴是买彩票的。我不回

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2015-10-26 19:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用中国龙王在2015-10-26 19:12:19的发言:

这类贴是买彩票的。我不回

世事本来,对立统一。水能载舟,亦能覆舟。
取之弃之,请君三思。
程序代码:
CREATE CURSOR 表1 (序号 I, 结果 V(5))
INSERT INTO 表1 VALUES(1, "05601")
INSERT INTO 表1 VALUES(2, "47896")
INSERT INTO 表1 VALUES(3, "81222")
INSERT INTO 表1 VALUES(4, "48068")
INSERT INTO 表1 VALUES(5, "54969")
CREATE CURSOR 表2 (序号 I, 结果 V(3))
INSERT INTO 表2 VALUES(1, "005")
INSERT INTO 表2 VALUES(2, "048")
INSERT INTO 表2 VALUES(3, "128")
INSERT INTO 表2 VALUES(4, "379")
INSERT INTO 表2 VALUES(5, "468")

SELECT 表2
SCAN
    不包含 = .T.
    SELECT 表1
    SCAN
        IF LIKE(转换表2(表2.结果), 转换表1(表1.结果))
            不包含 = .F.
            EXIT
        ENDIF
    ENDSCAN
    IF 不包含
        ? "不包含", 表2.结果
    ENDIF
ENDSCAN

FUNCTION 转换表1(S1)
    LOCAL i, aS1[LEN(S1)]
    FOR i = 1 TO ALEN(aS1)
        aS1[i] = SUBSTR(S1, i, 1)
    ENDFOR
    ASORT(aS1)
    S1 = ""
    FOR i = 1 TO ALEN(aS1)
        S1 = S1 + aS1[i]
    ENDFOR
    RETURN S1
ENDFUNC

FUNCTION 转换表2(S2)
    LOCAL i, aS2[LEN(S2)]
    FOR i = 1 TO ALEN(aS2)
        aS2[i] = SUBSTR(S2, i, 1)
    ENDFOR
    ASORT(aS2)
    S2 = "*"
    FOR i = 1 TO ALEN(aS2)
        S2 = S2 + aS2[i] + "*"
    ENDFOR
    RETURN S2
ENDFUNC
2015-10-26 19:21
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:2 
买彩票的
2015-10-26 19:37
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用吹水佬在2015-10-26 19:21:45的发言:


世事本来,对立统一。水能载舟,亦能覆舟。
取之弃之,请君三思。
CREATE CURSOR 表1 (序号 I, 结果 V(5))
INSERT INTO 表1 VALUES(1, "05601")
INSERT INTO 表1 VALUES(2, "47896")
INSERT INTO 表1 VALUES(3, "81222")
INSERT INTO 表1 VALUES(4, "48068")
INSERT INTO 表1 VALUES(5, "54969")
CREATE CURSOR 表2 (序号 I, 结果 V(3))
INSERT INTO 表2 VALUES(1, "005")
INSERT INTO 表2 VALUES(2, "048")
INSERT INTO 表2 VALUES(3, "128")
INSERT INTO 表2 VALUES(4, "379")
INSERT INTO 表2 VALUES(5, "468")

SELECT 表2
SCAN
    不包含 = .T.
    SELECT 表1
    SCAN
        IF LIKE(转换表2(表2.结果), 转换表1(表1.结果))
            不包含 = .F.
            EXIT
        ENDIF
    ENDSCAN
    IF 不包含
        ? "不包含", 表2.结果
    ENDIF
ENDSCAN

FUNCTION 转换表1(S1)
    LOCAL i, aS1[LEN(S1)]
    FOR i = 1 TO ALEN(aS1)
        aS1[i] = SUBSTR(S1, i, 1)
    ENDFOR
    ASORT(aS1)
    S1 = ""
    FOR i = 1 TO ALEN(aS1)
        S1 = S1 + aS1[i]
    ENDFOR
    RETURN S1
ENDFUNC

FUNCTION 转换表2(S2)
    LOCAL i, aS2[LEN(S2)]
    FOR i = 1 TO ALEN(aS2)
        aS2[i] = SUBSTR(S2, i, 1)
    ENDFOR
    ASORT(aS2)
    S2 = "*"
    FOR i = 1 TO ALEN(aS2)
        S2 = S2 + aS2[i] + "*"
    ENDFOR
    RETURN S2
ENDFUNC

吹版,想到的方法高,用数组排序,最难得的是在表2中的字符中间加了个“*”,
2015-10-27 08:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
代码还可优化一下
如:
SELECT 表2
SCAN
    不包含 = .T.
    SELECT 表1
    SCAN
        IF LIKE(转换表2(表2.结果), 转换表1(表1.结果))
改为:
SELECT 表2
SCAN
    结果2 = 转换表2(表2.结果)
    不包含 = .T.
    SELECT 表1
    SCAN
        IF LIKE(结果2, 转换表1(表1.结果))

还可以减少一些循环动作
如:
    FOR i = 1 TO ALEN(aS1)
        aS1[i] = SUBSTR(S1, i, 1)
    ENDFOR
改为:
    ALINES(aS1, TRANSFORM(S1,"@R #,#,#,#,#"), ",")


2015-10-27 10:05
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
ALINES(aS1, TRANSFORM(S1,"@R #,#,#,#,#"), ",")
我查看了,为什么不用ALINES(aS1, TRANSFORM(S1,"@R #####"), ","),就是把“,”去掉,有什么不同
2015-10-27 10:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
这样看看就清楚
? TRANSFORM("12345","@R #,#,#,#,#")
2015-10-27 10:35
快速回复:请大神指导查询,比对问题
数据加载中...
 
   



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

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