以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]一个数据值提取的功能  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=16357)

--  作者:ddlzq
--  发布时间:2012/2/10 17:38:00
--  [求助]一个数据值提取的功能

各位老师:

     有一个功能需求,请各位老师赐教。

例一个单元格,输入后,按规则提取数据写到另一个单元格中。

例:数据格式 

ABC-001        会按分隔符“-”提取分隔符前三位,再提取分隔符后三位加个分隔符写入另一个单元格。 数据结果: ABC-001

ABC01-020/A 会按分隔符隔“-”提取分隔符前三位,再提取分隔符后三位加个分隔符写入另一个单元格。 数据结果:ABC-020

ABC1-123/AB 会按分隔符隔“-”提取分隔符前三位,再提取分隔符后三位加个分隔符写入另一个单元格。 数据结果:ABC-123

 

请问老师,是用表达式写还是用代码写?请老师赐教


--  作者:狐狸爸爸
--  发布时间:2012/2/10 17:42:00
--  
Dim vals() As String = "ABC01-020/A".Split("-")
If vals.Length >=2 Then
    Return vals(0).SubString(0,3) & "-" & Vals(1).SubString(0,3)
End If

--  作者:ddlzq
--  发布时间:2012/2/10 18:08:00
--  
狐爸,出了这个错,这是为啥 ?
图片点击可在新窗口打开查看此主题相关图片如下:无标题.jpg
图片点击可在新窗口打开查看

--  作者:ddlzq
--  发布时间:2012/2/10 18:19:00
--  

If e.DataCol.name = "规格型号" Then
Dim vals() As String = e.DataRow("规格型号").Split("-")
If vals.Length >=2 Then
 Dim gjz As String = vals(0).SubString(0,3) & "-" & Vals(1).SubString(0,3)
    e.DataRow("规格型号关键字") = gjz
End If
    End If

 

狐爸:我借您代码,这样写了,可以,但如果数据写这样就会出错

例数值 ABC-01   而写ABC-010 分隔符后位数够了才可以,如何能够避免呢?


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

--  作者:czy
--  发布时间:2012/2/10 19:09:00
--  

那不这样改一下

 

Dim vals() As String = "ABC01-01".Split("-")
If vals.Length >=2 Then
    Dim n,n1 As Integer
    n = iif(Len(Vals(0))<3,Len(Vals(0)),3)
    n1 = iif(Len(Vals(1))<3,Len(Vals(1)),3)
    Return vals(0).SubString(0,n) & "-" & Vals(1).SubString(0,n1)
End If


--  作者:小猪鑫鑫
--  发布时间:2012/2/10 21:46:00
--  
学习
--  作者:ddlzq
--  发布时间:2012/2/13 15:04:00
--  

真的非常感谢CZY 老师!