Foxtable(狐表)用户栏目专家坐堂 → 两个字符串如何快速判断是否包含其中部份


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

主题:两个字符串如何快速判断是否包含其中部份

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


加好友 发短信
等级:八尾狐 帖子:1926 积分:17379 威望:0 精华:0 注册:2014/7/29 19:09:00
两个字符串如何快速判断是否包含其中部份  发帖心情 Post By:2015/7/16 14:41:00 [只看该作者]

字符串 str1 = "业务部.经理,业务部.主管,生产部.经理,生产部.文员"

字符串 str2 = "业务部.主管,生产部.经理"

 

如何写代码判断:字符串str2中的每一个部门角色(用逗号,分隔)至少有一个不在字符串 str1的部门角色中,或者全部都在 str1的部门角色中?

 

谢谢!

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/16 14:43:00 [只看该作者]

 必须分隔str2,然后循环str2
[此贴子已经被作者于2015/7/16 14:43:46编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/16 14:52:00 [只看该作者]

Dim str1 As String = "业务部.经理,业务部.主管,生产部.经理,生产部.文员"

Dim str2 As String = "业务部.主管,生产部.经理,123"

Dim ary() As String = str1.Split(",")
Dim flag As Boolean = True
For Each s As String In str2.Split(",")
    If Array.IndexOf(ary,s) = -1 Then
        flag = False
        Exit For
    End If
Next
msgbox(flag)


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


加好友 发短信
等级:八尾狐 帖子:1926 积分:17379 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/7/16 14:53:00 [只看该作者]

  Dim A As String
    For Each rol As String In str1.split(",")

      if str2.Contains(rol) then

         A = "包含"

      else

         A = “不包含”

      exit for

      end if
    Next

这样写吗?


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/16 14:54:00 [只看该作者]

 看3楼

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


加好友 发短信
等级:八尾狐 帖子:1926 积分:17379 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/7/16 15:24:00 [只看该作者]

谢谢!但如果是这样类似的判断用在表达式中就不知道怎么写了,比如下图

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20150716151535194.jpg
图片点击可在新窗口打开查看

 

dim cns as string

cns = DataTables("表A").GetComboListString("可查看列","可查看列 is not null and (str2中的部门角色至少有一个不在str1中)

 

后面红色那部门要怎么写代码才能表达出来?谢谢!


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/16 15:29:00 [只看该作者]

 加一个辅助列,去编写datacolchanged事件,得到是否存在,这样利于搜索查询。

 

 不然,就必须循环每一行才能得到结果。


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


加好友 发短信
等级:八尾狐 帖子:1926 积分:17379 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/7/16 17:14:00 [只看该作者]

如果不用增加辅助列,直接用下面的代码先将str2的值拆分用Not like运算符连接起来再用在下面的表达式中是否可行?'---将用户及角色用or运算符连接起来
Dim flt As String
For Each rol As String In str2.split(",")  '连接当前用户的所有角色
    flt = flt & " or str1 Not Like '%" & rol & "%'"
Next

flt = "A " & flt

 

dim cns as string

cns = DataTables("表A").GetComboListString("可查看列","可查看列 is not null and (str1 not like " & flt & ")")

 

用or连接效率是不是很低?



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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/7/16 17:20:00 [只看该作者]

 str1和str2的比较,是一行一行的比较,还是一整列合并以后比较?

 

 如果是一整列,可以用8楼的代码


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


加好友 发短信
等级:八尾狐 帖子:1926 积分:17379 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2015/7/16 17:24:00 [只看该作者]

是一行一行的比较,只是出了用like 或者 not like 外不知道还能用什么运算符效率更高?


 回到顶部
总数 13 1 2 下一页