以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]多种格式的二维码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85134) |
-- 作者:huhu -- 发布时间: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
|
-- 作者:大红袍 -- 发布时间:2016/5/18 16:44:00 -- 1、贴出各种数据,说明要截取什么东西
2、尽量做例子发上来。 |
-- 作者:huhu -- 发布时间: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 -- 发布时间: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
|
-- 作者:大红袍 -- 发布时间: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|$)")
|
-- 作者:huhu -- 发布时间: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列各自取各自的值。 这种情况该怎么解决?
|
-- 作者:大红袍 -- 发布时间:2016/5/19 14:49:00 -- 去看一下扫描枪的说明书,设置一下内容之间不要用回车分割;或者是设置一下扫描枪的起始符和结束符。 |
-- 作者:huhu -- 发布时间:2016/5/19 15:07:00 -- 去看一下扫描枪的说明书,设置一下内容之间不要用回车分割;或者是设置一下扫描枪的起始符和结束符。 一定要这么做吗? 不这么做可以吗?我们软件是否可以自行处理呢?
|
-- 作者:大红袍 -- 发布时间:2016/5/19 15:10:00 -- 不可以。不能和回车键冲突,不然不知道什么时候算一次扫描啊。 |