以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教字符串分拆,一列分成两列  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=179943)

--  作者:13315253800
--  发布时间:2022/9/19 21:59:00
--  请教字符串分拆,一列分成两列
请教字符串分拆,一列分成两列

字符列“地址电话”包含地址和电话,中间用空格相隔,想通过代码得出“地址”和“电话”两列。下面代码出现错误,请老师指导

If e.DataCol.Name = "地址电话" Then \'是地址电话发生变化吗?

    If e.DataRow.IsNull("地址电话") Then \'地址电话是否为空

        e.DataRow("地址") = Nothing \'如果为空,则清除地址

        e.DataRow("电话") = Nothing \'如果为空,则电话

    Else

        Dim dr As DataRow = e.DataRow

        Dim Tel As String = e.DataRow("地址电话")

        Dim Parts() As String = Tel.Split(" ")

        dr("地址") = Parts(0)) \'否则从地址电话列中提取地址

        dr("电话") = Parts(1)) \'否则从地址电话列中提取电话

    End If

End If


--  作者:有点蓝
--  发布时间:2022/9/19 22:06:00
--  

   Else

        Dim dr As DataRow = e.DataRow

        Dim Tel As String = dr("地址电话")

        Dim Parts() As String = Tel.Split(" ")

        dr("地址") = Parts(0) \'否则从地址电话列中提取地址

if Parts.length > 1

        dr("电话") = Parts(1) \'否则从地址电话列中提取电话

end if

    End If

End If

[此贴子已经被作者于2022/9/19 22:06:05编辑过]

--  作者:13315253800
--  发布时间:2022/9/19 22:30:00
--  
谢谢老师!我太粗心了
--  作者:13315253800
--  发布时间:2022/9/20 10:13:00
--  
蓝老师,如果地址与电话号码之间没有空格,只是汉字与阿拉伯数字的区别能用代码分拆为两列吗?我现在是用手工添加空格再执行上面的代码,有点麻烦。请教蓝老师
--  作者:有点蓝
--  发布时间:2022/9/20 10:23:00
--  
试试

Dim s As String = "广东省湛江市13013013000"
Dim p As String = "\\d+"
Dim r As New System.Text.RegularExpressions.Regex(p)
Dim str() As String = r.Split(s)
Output.Show(str(0))
Output.Show(s.Replace(str(0), ""))

但是如果地址有数字,比如【3栋503方】,或者电话里有字符,比如【0759-2111111】就不好办了

--  作者:13315253800
--  发布时间:2022/9/20 10:31:00
--  
好,我试试
--  作者:13315253800
--  发布时间:2022/9/20 10:54:00
--  
蓝老师,地址确实有数字。按您提示的方法我用在了“开户行及账号”列,拆分为“开户行”、“银行账号”两列。成功了代码如下
\'字符串分拆,一列分成两列
If e.DataCol.Name = "开户行及账号" Then \'发生变化列
    If e.DataRow.IsNull("开户行及账号") Then \'是否为空    
        e.DataRow("开户行") = Nothing \'如果为空,则清除    
        e.DataRow("银行账号") = Nothing \'如果为空,则清除    
    Else
        Dim dr As DataRow = e.DataRow 
        Dim s As String = dr("开户行及账号")
        Dim p As String = "\\d+"
        Dim r As New System.Text.RegularExpressions.Regex(p)
        Dim str() As String = r.Split(s) 
        dr("开户行") = str(0) \'否则从开户行及账号列中提取开户行    
        dr("银行账号") = s.Replace(str(0),"")\'否则从开户行及账号列中提取银行账号        
    End If
End If