以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  字符串处理难题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=173851)

--  作者:czy66ds
--  发布时间:2021/12/20 8:18:00
--  字符串处理难题
设字符串 S="A|a,B|b"  
希望处理成这个样子:
"([年代] = A and [季节] = a) or ([年代] = B and [季节] = b)"
可以办到吗?

--  作者:有点蓝
--  发布时间:2021/12/20 8:45:00
--  
Dim S As String="A|a,B|b"
Dim filter As String = "1=2 "
For Each s1 As String In s.Split(",")
    Dim ss() As String = s1.Split("|")
    filter = filter & CExp(" Or ([年代] = {0} And [季节] = {1})",ss(0),ss(1))
Next
msgbox(filter)
[此贴子已经被作者于2021/12/20 11:58:11编辑过]

--  作者:czy66ds
--  发布时间:2021/12/20 11:22:00
--  
谢谢,版主提供的处理方式太美妙了,CEXP函数也太美妙了。
还有一个问题,运行楼上代码的结果是:
1=1  Or ([年代] = A And [季节] = a) Or ([年代] = B And [季节] = b)
如何将Or 改为 and 呢?


--  作者:有点蓝
--  发布时间:2021/12/20 11:58:00
--  
搞错了

Dim filter As String = "1=1 "
改为
Dim filter As String = "1=2 "

--  作者:czy66ds
--  发布时间:2021/12/20 12:49:00
--  
实用上
起始条件filter可能不是Dim filter As String = "1=2 "
而是另一个参与选择的条件,
比如 Dim filter As String = "[日期] = \'2021-12-20\'" 
那么上述的 OR就需改为AND

--  作者:有点蓝
--  发布时间:2021/12/20 13:37:00
--  
先正常生成filter ,最后再和其它条件合并

Dim S As String="A|a,B|b"
Dim filter As String = "1=2 "
For Each s1 As String In s.Split(",")
    Dim ss() As String = s1.Split("|")
    filter = filter & CExp(" Or ([年代] = {0} And [季节] = {1})",ss(0),ss(1))
Next
filter = "(" filter  & ") and [日期] = \'2021-12-20\'"
msgbox(filter)