Foxtable(狐表)用户栏目专家坐堂 → [求助]多种格式的二维码


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

主题:[求助]多种格式的二维码

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
[求助]多种格式的二维码  发帖心情 Post By:2016/5/18 16:27:00 [只看该作者]

二维码有好几种格式组合,
比如下面这4种。
SN,MAC,H/W
SN,H/W
SN,MAC
MAC,H/W
在datacolchanging,如何用select case来处理这4种情况?都用if ,会顺序执行,会重复。
If e.DataCol.Name = "SN" Then
    Dim str As String = e.NewValue
    If str.Contains("SN:") And str.Contains("MAC:") And str.Contains("H/W:") Then
        Dim idx1 As Integer = str.IndexOf("MAC:")
        Dim idx2 As Integer = str.IndexOf("H/W:")
        e.DataRow("MAC") = str.substring(idx1+4, idx2-idx1-5)
        e.DataRow("HW") = str.substring(idx2+5)
        e.NewValue = str.SubString(3, idx1-3)
    End If
End If

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


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

1、贴出各种数据,说明要截取什么东西

 

2、尽量做例子发上来。


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/5/19 6:01:00 [只看该作者]

第一种,SN:,MAC:,H/W:都有的。如:SN:20013040158 MAC:00:E0:0F:00:00:01 H/W:VERSION2.2.2.0
第二种,仅有SN:,MAC:。如:SN:20013040158 MAC:00:E0:0F:00:00:01 
第三种,仅有SN:,H/W:。如:SN:20013040158  H/W:VERSION2.2.2.0
第四种,仅有MAC:,H/W:。如:MAC:00:E0:0F:00:00:01 H/W:VERSION2.2.2.0
想实现目的为:
扫描二维码,先看看是上面哪一种格式,写入数据前先判断一下。
如果是第一种格式,那么SN列,MAC列,HW列的值分别为20013040158,00:E0:0F:00:00:01,VERSION2.2.2.0
如果是第二种格式,那么SN列,MAC列的值分别为20013040158,00:E0:0F:00:00:01,且HW列的值为空
如果是第三种格式,那么SN列,HW列的值分别为20013040158,VERSION2.2.2.0,且MAC列的值为空
如果是第四种格式,那么MAC列,HW列的值分别为00:E0:0F:00:00:01,VERSION2.2.2.0,且SN列的值也为MAC列的值00:E0:0F:00:00:01





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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/5/19 8:47:00 [只看该作者]

If e.DataCol.Name = "SN" Then
    Dim str As String = e.NewValue
    Dim idx1 As Integer = str.IndexOf("MAC:")
    Dim idx2 As Integer = str.IndexOf("H/W:")
    Dim length As Integer
    If str.Contains("SN:") Then
        length  = IIF(idx1 <> -1,idx1-3,IIF(idx2 <> -1,idx2-4,str.Length - 3))
        e.NewValue = str.SubString(3, length)
    Else
        e.NewValue =Nothing
    End If
    If str.Contains("MAC:") Then
        If idx2 = -1 Then
            e.DataRow("MAC") = str.SubString(idx1+4)
        Else
            e.DataRow("MAC") = str.SubString(idx1+4, idx2-idx1-4)
        End If
    End If
    If str.Contains("H/W:") Then
        e.DataRow("HW") = str.substring(idx2+4)
    End If
End If

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


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

这种那个,直接用正则获取

 

Dim str As String = "SN:20013040158 MAC:00:E0:0F:00:00:01 H/W:VERSION2.2.2.0"

Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=SN:).+?(?= |MAC|H/W|$)")
msgbox(mc.count)
If mc.count > 0 Then
    msgbox(mc(0).value)
End If
mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=MAC:).+?(?= |SN|H/W|$)")
msgbox(mc.count)
If mc.count > 0 Then
    msgbox(mc(0).value)
End If
mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=H/W:).+?(?= |MAC|SN|$)")
msgbox(mc.count)
If mc.count > 0 Then
    msgbox(mc(0).value)
End If

 


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/5/19 14:32:00 [只看该作者]

4楼的代码看懂了。
大红袍的正则表达式的暂时没看懂。
现在的情况是手机扫描二维码显示结果为:
SN:S21037742 MAC:00:e0:0f:4c:af:a6 
H/W:MFRP0160040440EE00
用扫描枪去扫这个二维码结果显示为:
SN:S21037742 
MAC:00:e0:0f:4c:af:a6 
H/W:MFRP0160040440EE00

SN,MAC,H/W自动换行。这样对SN列相当于是弄了3行数据,而实际上应该为一行数据,SN列,MAC列,H/W列各自取各自的值。
这种情况该怎么解决?

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


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

 去看一下扫描枪的说明书,设置一下内容之间不要用回车分割;或者是设置一下扫描枪的起始符和结束符。


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/5/19 15:07:00 [只看该作者]

去看一下扫描枪的说明书,设置一下内容之间不要用回车分割;或者是设置一下扫描枪的起始符和结束符。

一定要这么做吗?
不这么做可以吗?我们软件是否可以自行处理呢?

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


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

 不可以。不能和回车键冲突,不然不知道什么时候算一次扫描啊。

 回到顶部