| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1339 人关注过本帖
标题:含有通配符条件的筛选代码
只看楼主 加入收藏
kesc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:84
专家分:10
注 册:2006-10-11
结帖率:60%
收藏
已结贴  问题点数:18 回复次数:9 
含有通配符条件的筛选代码
科目KM是变量
当KM="1002***001888"   *号是通配符
如何从dm表中筛选出符合条件的记录(dm是表中的一个字段)
即set filt to subs(dm,1,4)="1002" and subs(dm,8,6)="0001888" 这段筛选代码如何自动生成
再比如当KM="1002***13**66"
要自动生成筛选代码 set filt to subs(dm,1,4)="1002" and subs(dm,8,2)="13" and subs(dm,12,2)="66"


[ 本帖最后由 kesc 于 2015-5-11 13:36 编辑 ]
搜索更多相关主题的帖子: 通配符 记录 如何 
2015-05-11 10:10
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 
不行吧,KM="1002***001888" 只是一个固定的字符串.
可以用LIKEC()函数

[ 本帖最后由 muyubo 于 2015-5-11 11:45 编辑 ]
2015-05-11 11:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
LIKEC()
2015-05-11 11:39
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 

DISPLAY  LIKEC("1002???001888",dm) &&dm是字段
DISPLAY  LIKEC("1002*001888",dm) &&dm是字段
2015-05-11 12:19
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
KM="1002***001888"
tj=''
c2=''
i1=1
FOR i2=1 TO LEN(km)
    c1=SUBSTR(km,i2,1)
    IF c1='*'
        IF NOT EMPTY(c2)
            tj=tj+"substr(dm,"+TRANSFORM(i1)+","+TRANSFORM(i2-i1)+")='"+c2+"' and "
            c2=''
        ENDIF
        i1=i2+1
    ELSE
        c2=c2+c1
    ENDIF
ENDFOR
IF NOT EMPTY(c2)
    tj=tj+"substr(dm,"+TRANSFORM(i1)+","+TRANSFORM(i2-i1)+")='"+c2+"' and "
ENDIF
IF NOT EMPTY(tj)
    tj=LEFT(tj,LEN(tj)-4)
ENDIF
SET FILTER TO &tj.
2015-05-11 14:55
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:18 
以下是引用kesc在2015-5-11 10:10:43的发言:

科目KM是变量
当KM="1002***001888"   *号是通配符
如何从dm表中筛选出符合条件的记录(dm是表中的一个字段)
即set filt to subs(dm,1,4)="1002" and subs(dm,8,6)="0001888" 这段筛选代码如何自动生成
再比如当KM="1002***13**66"
要自动生成筛选代码 set filt to subs(dm,1,4)="1002" and subs(dm,8,2)="13" and subs(dm,12,2)="66"
你一定要这样的效果,只能用LEN()函数获得这个模式变量KM的字符串长度,然后用一个FOR...NEXT套子从第一个字符开始循环至最后一个字符。套子里逐一判断哪个位子是星号,不是星号的就叠加在一起。如果碰到星号就断开,前面所有不是星号的字符就独立成串,放在一个变量中。至于每个SUBSTR()函数的参数值,也要靠循环变量和一个累计变量去记录。基本思路就是这样。
2015-05-11 15:37
kesc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:84
专家分:10
注 册:2006-10-11
收藏
得分:0 
回复 5楼 kiff
谢谢kiff版主,完全正确!
2015-05-11 15:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.可以做到
2.仿效通配符的习惯,用?代表单个字符,*代表不定个数字符

授人以渔,不授人以鱼。
2015-05-11 18:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把你的测试数据表发上来

授人以渔,不授人以鱼。
2015-05-11 19:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
CLEAR

DIMENSION aString[4]
aString[1] = "1002abc001888"
aString[2] = "1002ab001888"
aString[3] = "102abc001888"
aString[4] = "1002abc009888"

cTemplate = "1002???0??888"
FOR i = 1 TO ALEN(aString)
    ? aString[i] + IIF(LIKE(cTemplate, aString[i]), " ", " 不") + "匹配 " + cTemplate
NEXT 

?

cTemplate = "1002*001888"
FOR i = 1 TO ALEN(aString)
    ? aString[i] + IIF(LIKE(cTemplate, aString[i]), " ", " 不") + "匹配 " + cTemplate
NEXT 


set filter to like(cTemplate, dm)

[ 本帖最后由 TonyDeng 于 2015-5-11 19:47 编辑 ]

授人以渔,不授人以鱼。
2015-05-11 19:42
快速回复:含有通配符条件的筛选代码
数据加载中...
 
   



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

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