Foxtable(狐表)用户栏目专家坐堂 → 字符串处理难题


  共有3339人关注过本帖树形打印复制链接

主题:字符串处理难题

帅哥哟,离线,有人找我吗?
czy66ds
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1691 积分:16472 威望:0 精华:0 注册:2013/7/31 13:03:00
字符串处理难题  发帖心情 Post By:2021/12/20 8:18:00 [只看该作者]

设字符串 S="A|a,B|b"  
希望处理成这个样子:
"([年代] = A and [季节] = a) or ([年代] = B and [季节] = b)"
可以办到吗?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1691 积分:16472 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2021/12/20 11:22:00 [只看该作者]

谢谢,版主提供的处理方式太美妙了,CEXP函数也太美妙了。
还有一个问题,运行楼上代码的结果是:
1=1  Or ([年代] = A And [季节] = a) Or ([年代] = B And [季节] = b)
如何将Or 改为 and 呢?


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/12/20 11:58:00 [只看该作者]

搞错了

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

 回到顶部
帅哥哟,离线,有人找我吗?
czy66ds
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1691 积分:16472 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2021/12/20 12:49:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111427 积分:567211 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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)

 回到顶部