标题:科目查询代码转换
只看楼主
kesc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:84
专家分:10
注 册:2006-10-11
结帖率:60%
已结贴  问题点数:19 回复次数:12 
科目查询代码转换
查询的科目的格式为:科目编码.部门编码.个人编码.客户编码.供应商编码.项目编码
km="22310108.0101.0068.0088.hcjs.hchy"
如何转换成dm="22310108" and bmbm=="0101" and grbm=="0068" and khbm=="0088" and gybm=="hcjs" and xmbm=="hchy"
再比如km="286801.0108..yxgs"   
转换成  dm="286801" and bmbm=="0108" and khbm=="yxgs"
再比如km="286801"   则只转换成  dm="286801"

搜索更多相关主题的帖子: 项目 如何 供应商 
2015-05-14 11:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:4 
先将字符串分解,子字符串内容保存在数组中。
km="22310108.0101.0068.0088.hcjs.hchy"
ALINES(ASTR,CHRTRAN(KM,".",CHR(13)+CHR(10)))
LIST MEMORY LIKE ASTR
再在表达式相应的位置替换为数组中的内容

坚守VFP最后的阵地
2015-05-14 13:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:8 
程序代码:
km = "22310108.0101.0068.0088.hcjs.hchy"
cExp = ""
ALINES(aExp, [dm="," and bmbm=="," and grbm=="," and khbm=="," and gybm=="," and xmbm=="], ",")
FOR i = 1 TO ALINES(aKM, km, ".")
    cExp = cExp + aExp[i] + aKM[i]
ENDFOR
cExp = cExp + ["]
? cExp
2015-05-14 14:03
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
得分:7 
*km="22310108.0101.0068.0088.hcjs.hchy"
km="286801.0108..yxgs"   
*km="286801"
km=km+'.'
c2=''
FOR i1=1 TO ALINES(field_name, 'dm,bmbm,grbm,khbm,gybm,xmbm', ',')
    i2=AT('.',km)
    IF i2>0
        c1=ALLTRIM(LEFT(km,i2-1))
        IF NOT EMPTY(c1)
            c2=c2+"ALLTRIM("+field_name[i1]+")=='"+c1+"' and "
        ENDIF
        km=ALLTRIM(SUBSTR(km,i2+1))
    ENDIF
    IF EMPTY(km)
        EXIT
    ENDIF
ENDFOR
IF NOT EMPTY(c2)
    c2=LEFT(c2,LEN(c2)-4)
ENDIF
WAIT WINDOW c2
2015-05-14 14:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
代码要兼容VFP6版本

坚守VFP最后的阵地
2015-05-14 14:53
kesc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:84
专家分:10
注 册:2006-10-11
得分:0 
回复 3楼 吹水佬
完善一下
km="2231058508.gcb1...hcjs.hchy"
cExp=""
ALINES(aExp,[dm="," and bmbm=="," and grbm=="," and khbm=="," and gybm=="," and xmbm=="], ",")
FOR i=1 TO ALINES(aKM,km,".")
IF LEN(ALLTRIM(aKM[i]))>0
  cExp=cExp+aExp[i]+aKM[i]
ENDIF
ENDFOR
cExp=cExp+["]
?cExp
2015-05-14 14:54
kesc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:84
专家分:10
注 册:2006-10-11
得分:0 
谢谢各位版主,你们的答案都很精彩!
2015-05-14 14:57
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
km="2231058508.gcb1...hcjs.hchy"
IF LEN(KM)=0
    RETURN
ENDIF

下面的代码仍用三楼的代码
cExp = ""
ALINES(aExp, [dm="," and bmbm=="," and grbm=="," and khbm=="," and gybm=="," and xmbm=="], ",")
FOR i = 1 TO ALINES(aKM, km, ".")
    cExp = cExp + aExp[i] + aKM[i]
ENDFOR
cExp = cExp + ["]
? cExp

坚守VFP最后的阵地
2015-05-14 15:00
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用kesc在2015-5-14 14:54:07的发言:

完善一下
km="2231058508.gcb1...hcjs.hchy"
cExp=""
ALINES(aExp,[dm="," and bmbm=="," and grbm=="," and khbm=="," and gybm=="," and xmbm=="], ",")
FOR i=1 TO ALINES(aKM,km,".") && 如果变量 KM 为空,再判断IF 语句也就没意义了
IF LEN(ALLTRIM(aKM))>0
  cExp=cExp+aExp+aKM
ENDIF
ENDFOR
cExp=cExp+["]
?cExp


[ 本帖最后由 sdta 于 2015-5-14 15:05 编辑 ]

坚守VFP最后的阵地
2015-05-14 15:02
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
是不是把简单问题复杂化了,事先为什么要将查询条件拼接成一个字符串呢。

活到老,学到老! http://www. E-mail:hu-jj@
2015-05-14 15:03



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




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

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