Foxtable(狐表)用户栏目专家坐堂 → 关于字段数据分割


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

主题:关于字段数据分割

帅哥哟,离线,有人找我吗?
裴保民
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1989 积分:12631 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/4/16 12:06:00 [只看该作者]

和四楼的代码不一样吗?
我想实现把|“地址”字段中的省、市、区|县的部分提出来赋值给相应的字段中同时删除提取部分的内容

[此贴子已经被作者于2019/4/16 12:10:05编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2019/4/16 12:19:00 [只看该作者]

认认真真看代码啊,看懂代码了没有啊?你要做到什么效果啊?

 

Dim str As String = "福建省泉州市惠安县山霞镇田边村委会159号"
'Dim str As String = "上海市aa区bb街cc路xx号"
Dim ary() As String = {"^", "(省|上海市|北京市|重庆市|天津市|自治区)", "(市|区)", "县", "(镇|街)", "(村)", "$"}
Dim nr = Tables("表a").addnew
For i As Integer = 0 To 5
    For j As Integer = i To 0 Step -1
        Dim mc = System.Text.RegularExpressions.Regex.Match(str, "(?<=" & ary(j) & ").+" & ary(i+1))
        If mc.success Then
            msgbox(ary(i+1) & ":" & mc.value.remove(mc.value.length-1))
            If i=0 Then
                nr("第一列") = mc.value.remove(mc.value.length-1)
            End If
            If i=1 Then
                nr("第二列") = mc.value.remove(mc.value.length-1)
            End If
            Exit For
        End If
    Next
Next


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


加好友 发短信
等级:八尾狐 帖子:1989 积分:12631 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/4/16 13:28:00 [只看该作者]

我想实现把|“地址”字段中的省、市、区|县的部分提出来赋值给相应的字段中同时删除提取部分的内容
我读去的是数据表中地址字段中的内容,不是给定的固定字符串,经过测试原内容的省市区的内容部分没删除呢?
代码如下
Dim dt1 As DataTable = DataTables("发货地址")
Dim ary() As String = {"^", "(省|上海市|北京市|重庆市|天津市|自治区)", "(市)", "(区|县)", "$"}
For Each dr As DataRow In dt1.Select("")
    Dim fdr As DataRow = dt1.Find("地址='" & dr("地址") & "'")
    If fdr IsNot Nothing Then
        For i As Integer = 0 To 3
            For j As Integer = i To 0 Step -1
                Dim mc = System.Text.RegularExpressions.Regex.Match(dr("地址") , "(?<=" & ary(j) & ").+" & ary(i+1))
                If mc.success Then
                    If i=0 Then
                        dr("省") = mc.value.remove(mc.value.length-1) &  "省"
                    End If
                    If i=1 Then
                        dr("市") = mc.value.remove(mc.value.length-1) &  "市"
                    End If
                    If i=2 Then
                        If fdr("地址").Contains("区") Then
                            dr("区") = mc.value.remove(mc.value.length-1) &  "区"
                            
                        ElseIf fdr("地址").Contains("县") Then
                            dr("区") = mc.value.remove(mc.value.length-1) &  "县"
                        End If                     
                    End If
                    If i=3 Then
                        dr("具体地址") = mc.value.remove(mc.value.length-1)
                    End If
                    Exit For
                End If
            Next
        Next
    End If
Next
 


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

 

 

 

想实现同时删除地址字段中的省、市、区内容部分。比如“河北省石家庄市裕华区翟营南大街385号卓达书香园2区583号楼50单元501室”要删除"河北省石家庄市裕华区"部分内容

[此贴子已经被作者于2019/4/16 13:47:28编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/16 15:07:00 [只看该作者]

参考代码

 


Dim str As String = "河北省石家庄市裕华区翟营南大街385号卓达书香园2区583号楼50单元501室"
'Dim str As String = "上海市aa区bb街cc路xx号"
Dim ary() As String = {"^", "(省|上海市|北京市|重庆市|天津市|自治区)", "(市|区)", "县", "(镇|街)", "(村)", "$"}

Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(.*?省|上海市|北京市|重庆市|天津市|自治区)(.*?市|区)(.*?区|县)")
msgbox(mc(0).groups(0).value)
msgbox(mc(0).groups(1).value)
msgbox(mc(0).groups(2).value)
msgbox(mc(0).groups(3).value)

msgbox(str.Replace(mc(0).groups(0).value, ""))

 

 


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


加好友 发短信
等级:八尾狐 帖子:1989 积分:12631 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/4/16 23:24:00 [只看该作者]

Dim dt1 As DataTable = DataTables("发货地址")
For Each dr As DataRow In dt1.Select("")
    Dim fdr As DataRow = dt1.Find("地址='" & dr("地址") & "'")    
    Dim str As String = dr("地址") 
    Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(.*?省|上海市|北京市|重庆市|天津市|自治区)(.*?市|区)(.*?区|县)")
    dr("省") = mc(0).groups(1).value
   dr("市") = mc(0).groups(2).value
  dr("区") = mc(0).groups(3).value
    dr("具体地址") = str.Replace(mc(0).groups(0).value, "")   
Next
地址字段内容是人工输入的有有省份有的没有有的有市区有的没有
代码那有问题运行后弹出错误框

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

[此贴子已经被作者于2019/4/17 9:43:55编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/17 10:24:00 [只看该作者]

具体实例发上来测试。14楼代码我测试没问题。

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


加好友 发短信
等级:八尾狐 帖子:1989 积分:12631 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/4/17 14:20:00 [只看该作者]

麻烦测一下2到4行的数据
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目7.foxdb

第一行的“区”字段也有问题:应该是“裕华区”而显示“翟营南大街385号卓达书香园2区”

[此贴子已经被作者于2019/4/17 14:29:20编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/17 15:53:00 [只看该作者]

1、没有省市区镇这样的地址,无法直接划分提取的。

 

2、修改代码

 

Dim dt1 As DataTable = DataTables("发货地址")
For Each dr As DataRow In dt1.Select("")
    Dim str As String = dr("地址")
    Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(.*?省|上海市|北京市|重庆市|天津市|自治区)(.*?市|区)(.*?区|县)")
    If mc.count > 0 Then
        If mc(0).groups.count >= 2 Then
            dr("省") = mc(0).groups(1).value
        End If
        If mc(0).groups.count >= 3 Then
            dr("市") = mc(0).groups(2).value
        End If
        If mc(0).groups.count >= 4 Then
            dr("区") = mc(0).groups(3).value
        End If
        dr("具体地址") = str.Replace(mc(0).groups(0).value, "")
    Else
        dr("具体地址") = str
    End If
Next


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


加好友 发短信
等级:八尾狐 帖子:1989 积分:12631 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2019/4/17 16:40:00 [只看该作者]

地址如果是“河北省邯郸市大名县沙地镇魏村”怎么不提取呢?


如果把什么区变为什么县以后就不提取了,直接把整个字段的内容全部赋值给“具体地址”字段了


如果是“北京市房山区西直门北大街388号”没有省也不提取的

[此贴子已经被作者于2019/4/17 16:49:06编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/17 17:27:00 [只看该作者]

参考

 

Dim dt1 As DataTable = DataTables("发货地址")
Dim ary() As String = {"(.*?省)(.*?市)(.*?区)", "(.*?省)(.*?市)(.*?县)", "(.*?市)(.*?区)"}

For Each dr As DataRow In dt1.Select("")
    Dim str As String = dr("地址")
    For Each s As String In ary
        Dim mc = System.Text.RegularExpressions.Regex.Matches(str, s)
        If mc.count > 0 Then
            If mc(0).groups.count >= 2 Then
                dr("省") = mc(0).groups(1).value
            End If
            If mc(0).groups.count >= 3 Then
                dr("市") = mc(0).groups(2).value
            End If
            If mc(0).groups.count >= 4 Then
                dr("区") = mc(0).groups(3).value
            End If
            dr("具体地址") = str.Replace(mc(0).groups(0).value, "")
            Exit For
        Else
            dr("具体地址") = str
        End If
    Next
Next


 回到顶部
总数 20 上一页 1 2