以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  索引超出了数组界限  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=173837)

--  作者:longyanlin
--  发布时间:2021/12/18 14:01:00
--  索引超出了数组界限
急求问题解决,请教执行如下代码是,出现索引超出了数组界限是怎么回事:
For Each dr As Row In Tables("装配日记录表").rows
    Dim ary() As String = dr("不良原因及数量").split(",")
    For Each s As String In ary
        Dim ndr As Row = Tables("装配质量流水账").addnew
        Dim a() As String = s.split("*")
        ndr("不良原因") = a(0)
        ndr("不良数量") = a(1)
        ndr("产品编号") = dr("产品编号")
    Next
Next

--  作者:有点蓝
--  发布时间:2021/12/18 14:07:00
--  
For Each dr As Row In Tables("装配日记录表").rows
    Dim ary() As String = dr("不良原因及数量").split(",")
    For Each s As String In ary
        Dim ndr As Row = Tables("装配质量流水账").addnew
        Dim a() As String = s.split("*")
        ndr("不良原因") = a(0)
if a.length > 1 then ndr("不良数量") = a(1)
ndr("产品编号") = dr("产品编号")
    Next
Next

--  作者:longyanlin
--  发布时间:2021/12/18 14:19:00
--  
使用如上代码分解不出来:“不良原因”,与“不良数量”,而是复制了所表的所有编号

图片点击可在新窗口打开查看此主题相关图片如下:111.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/12/18 14:41:00
--  
说明源表就没有数据

For Each dr As Row In Tables("装配日记录表").rows
msgbox(dr("不良原因及数量"))
……

--  作者:longyanlin
--  发布时间:2021/12/18 15:25:00
--  
老师,确实前面的表里面有很多行“不良原因及数量”里面没有内容,但是筛选有内容的后还是不能分离成两列的数量,“不良数量”里面还是为空,能帮助改下代码:
For Each dr As Row In Tables("装配日记录表").rows
    Dim ary() As String = dr("不良原因及数量").split("")
    For Each s As String In ary
        Dim ndr As Row = Tables("装配质量流水账").addnew
        Dim a() As String = s.split("")
        ndr("不良原因") = a(0)
If a.length > 1 Then ndr("不良数量") = a(1)
ndr("产品编号") = dr("产品编号")
    Next
Next
增加代码变成筛选“不良原因及数量”不为空的行,以及分类成“不良原因”和“不良数量”两列都填写上


如上代码还是没有“不良数量”:

图片点击可在新窗口打开查看此主题相关图片如下:222.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/12/18 15:35:00
--  
源数据源怎么样的?根据什么字符分隔?不可能根据空字符串分隔到的.split("")
--  作者:longyanlin
--  发布时间:2021/12/18 15:58:00
--  
原数据源是按”文字+数字,用,逗号分组

图片点击可在新窗口打开查看此主题相关图片如下:333.png
图片点击可在新窗口打开查看

老师,提取可以了,但是不会过滤不为空的值,

[此贴子已经被作者于2021/12/18 16:17:15编辑过]

--  作者:有点蓝
--  发布时间:2021/12/18 16:20:00
--  
数据里要改为英文的逗号:Dim ary() As String = dr("不良原因及数量").split(",")

然后“掌声30”这种中间没有分隔符,是无法使用split拆分的。改为“掌声-30”这种,或者其它符号分隔

不然有点麻烦,可以参考
Dim pattern As String = "[\\u4e00-\\u9fa5]"
For Each dr As Row In Tables("装配日记录表").rows
    Dim ary() As String = dr("不良原因及数量").split(",")
    For Each s As String In ary
        Dim ndr As Row = Tables("装配质量流水账").addnew
Dim str = System.Text.RegularExpressions.Regex.Replace(s, pattern ,"")
ndr("不良数量") = str
ndr("不良原因") = s.replace(str,"")
ndr("产品编号") = dr("产品编号")
    Next
Next

--  作者:longyanlin
--  发布时间:2021/12/18 16:36:00
--  
老师,其他都没有问题了,主要是怎么实现筛选“不良原因及数量”行里面有数据进行统计,而没有数据的行就自动过滤(空值)
--  作者:有点蓝
--  发布时间:2021/12/18 16:53:00
--  
使用8楼的方法处理后,在对"不良数量"列数据进行统计