以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  将某列的字符拆成两列  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=40839)

--  作者:tj-pacer
--  发布时间:2013/10/1 16:17:00
--  将某列的字符拆成两列

现材料规格列的值如下:

1020mm*100M

500mm*200M

1020mm*50M

980mm*400M

54"*350ft

36"*50ft

想将上述值拆分成:

"材料宽mm"  "材料长M"

1020            100

  500            200

1020              50

  980            400

(54*25.4)     (400*0.3048)

(36*25.4)     (50*0.3048)

如英制转换公制的值不好弄,把公制的拆开也会省大量人工。

 


--  作者:有点甜
--  发布时间:2013/10/1 16:34:00
--  

 参考下面的代码来改,弄不好的话,上传一个例子,说明要怎么做。

 

Dim data() As String = {"1020mm*100M", "36""*50ft"}
For Each d As String In data
    Dim ary() As String = d.Split("*")
    ary(0) = ary(0).Replace("mm", "").Replace("""", "*25.4")
    ary(1) = ary(1).Replace("M", "").Replace("ft", "*0.3048")
    msgbox(ary(0) & "   " & ary(1))
Next


--  作者:yan2006l
--  发布时间:2013/10/1 16:35:00
--  

第一步:(以*号拆分两列)

利用Split方法,可以用指定的分割符号,将一个字符串拆分成一个字符数组,例如:

Dim Tel As String = "0759-3166876"
Dim
Parts() As String = Tel.Split("-")
Output.Show(
"区号:" & Parts(0))
Output.Show(
"电话:" & Parts(1))

在命令窗口执行上述代码,得到的结果是:

区号:0759
电话:3166876

 

第二步:(将两列英语替换成“空值”或者“*比例”)

用Replace方法可以将字符串中的指定内容替换为另一个字符串,例如:

Dim s As String = "abc123abc"
s = s.Replace(
"123","789") \'将123替换为789
OutPut.Show(s)

在命令窗口执行上述代码,得到的结果是:abc789abc


--  作者:tj-pacer
--  发布时间:2013/10/2 10:11:00
--  

感谢2楼3楼!还是不理解,上个例子,求解。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:列值拆分.table

[此贴子已经被作者于2013-10-2 10:14:01编辑过]

--  作者:lsy
--  发布时间:2013/10/2 10:35:00
--  

说句大不敬的话,这样的数据、这样的表、这样的项目,就不应该拿出来用!

数据不规范,也可能是导入别人的,情有可原;列名也不规范,怨不得别人:大小写统一,不难吧?


--  作者:有点甜
--  发布时间:2013/10/2 11:15:00
--  

 把下面的代码复制到命令窗口执行,可以一次性填入数据。

 

For Each dr As DataRow In DataTables("物料表").Select("规格型号 is not null")
    Dim sps() As Char = {"*", "x", "X"}
    Dim ary() As String = dr("规格型号").split(sps)
    Dim width As String = ary(0).Replace("m", "").Replace("M", "").Replace(" ", "").Replace("""", "*25.4")
    Dim height As String = ary(1).Replace("m", "").Replace("M", "").Replace(" ", "").Replace("ft", "*0.3048").Replace("y", "").Replace("Y", "")

    dr("规格型号_宽mm") = Eval(width)
    dr("规格型号_长M") = Eval(height)
Next


--  作者:tj-pacer
--  发布时间:2013/10/2 12:17:00
--  

搞定了,谢谢!


--  作者:tj-pacer
--  发布时间:2013/10/2 12:19:00
--  
数据是导入的,好多数据需要整理规范,所以需要加工整理。
--  作者:lsy
--  发布时间:2013/10/2 13:29:00
--  

直接在导入后将【规格型号】列的数据规范化,不需要增加两列、再拆分:

DataColChanged

If e.DataCol.Name = "规格型号" Then
    Dim s As String = e.DataRow(e.DataCol).ToLower().Replace("m","").Replace("*","x").Replace(" ","").Replace("y","*0.9144").Replace("""","*25.4").Replace("ft","*0.3048")
    If s.Contains("x") Then
        e.DataRow(e.DataCol) = Eval(s.Split("x")(0)) & "mm x " & Eval(s.Split("x")(1)) & "m"
    End If
End If

[此贴子已经被作者于2013-10-2 13:48:58编辑过]

--  作者:有点甜
--  发布时间:2013/10/2 14:32:00
--  
以下是引用lsy在2013-10-2 13:29:00的发言:

直接在导入后将【规格型号】列的数据规范化,不需要增加两列、再拆分:

DataColChanged

If e.DataCol.Name = "规格型号" Then
    Dim s As String = e.DataRow(e.DataCol).ToLower().Replace("m","").Replace("*","x").Replace(" ","").Replace("y","*0.9144").Replace("""","*25.4").Replace("ft","*0.3048")
    If s.Contains("x") Then
        e.DataRow(e.DataCol) = Eval(s.Split("x")(0)) & "mm x " & Eval(s.Split("x")(1)) & "m"
    End If
End If

[此贴子已经被作者于2013-10-2 13:48:58编辑过]


顶……