Foxtable(狐表)用户栏目专家坐堂 → 将某列的字符拆成两列


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

主题:将某列的字符拆成两列

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


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
将某列的字符拆成两列  发帖心情 Post By: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)

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

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:431 积分:3214 威望:0 精华:2 注册:2011/9/10 21:35:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/2 10:11:00 [只看该作者]

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

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

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

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/10/2 10:35:00 [只看该作者]

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

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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/2 12:17:00 [只看该作者]

搞定了,谢谢!


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


加好友 发短信
等级:小狐 帖子:347 积分:2844 威望:0 精华:0 注册:2013/4/26 20:58:00
  发帖心情 Post By:2013/10/2 12:19:00 [只看该作者]

数据是导入的,好多数据需要整理规范,所以需要加工整理。

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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编辑过]


顶……

 回到顶部