最近自己帮媳妇所在部门做一个小型业务管理系统,遇到一个比较头疼的问题,数据库里面涉及大量用户地址数据,大概有80万条,这些数据都是从原来的业务系统中导出的,90%以上的地址是规则的,形如:A区B路(或街或巷)C栋-F号 E(E为字母标识),如果是这样规则的地址的话将地址中的五个元素取出来的话很简单,但是有些地址很不规则没有A,或者没有C,或者没有F,同时还有的地址没有标志比如区、路、街、巷、栋等,请问哪位老兄有什么好的解决办法?

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication50
    {
        class Program
        {
            static String SPS = "区路街巷栋-号*";        static void Main(string[] args)
            {
                String S = "火星区太阳路-17号A*#"; // #是结束符
                Dictionary<String, String> Dic = new Dictionary<string, string>();            for (int i = 0; i < SPS.Length; i++)
                    GetFirst(ref S, ref Dic, SPS.Substring(i, 1));            foreach (KeyValuePair<String, String> V in Dic)
                    Console.WriteLine(V.Key + " " + V.Value);            Console.Read();
            }
            static void GetFirst(ref String S, ref Dictionary<String, String> Dic, String SP)
            {
                String[] SS = S.Split(new String[] { SP }, StringSplitOptions.RemoveEmptyEntries);            if (SS.Length > 1) // 关键字出现在合适的位置
                {
                    Dic.Add(SP, SS[0]);
                    S = S.Remove(0, (SS[0] + SP).Length);
                }
                else if (SS.Length == 1 && SS[0] != S) // 关键字出现在最开始(-号)
                    S = S.Remove(0, SP.Length);
            }
        }
    }区 火星
    路 太阳
    号 17
    * A
      

  2.   

    先感谢wartim兄,我想要的是如何处理不规则的地址,关键是有些地址并不还有区、街、路、巷、栋和号以及"-"关键字,我想能不能将所有的区写成一个数组、所有的街道、路,巷写成一个数组,然后截取地址中的字符串和数组中的项进行匹配?我是分层截取的,一个函数只截取一个地址元素,第一次提取的时候地址元素如果为空或者长度大于实际存在的元素长度的最大值的话进行第二次提取,比如系统在街道或路或巷的最大长度为3,提取的地址元素长度如果大于3的话肯定是出错了,这时候开始进行第二种匹配提取,因为地址拆分的时候仅仅是在打印的时候进行,一次最多连续打印不会超过200条记录(每条记录一页),所以整个系统的效率影响不大,等待中.....
      

  3.   

    先感谢wartim兄,我想要的是如何处理不规则的地址,关键是有些地址并不还有区、街、路、巷、栋和号以及"-"关键字,我想能不能将所有的区写成一个数组、所有的街道、路,巷写成一个数组,然后截取地址中的字符串和数组中的项进行匹配?我是分层截取的,一个函数只截取一个地址元素,第一次提取的时候地址元素如果为空或者长度大于实际存在的元素长度的最大值的话进行第二次提取,比如系统在街道或路或巷的最大长度为3,提取的地址元素长度如果大于3的话肯定是出错了,这时候开始进行第二次匹配提取,因为地址拆分的时候仅仅是在打印的时候进行,一次最多连续打印不会超过200条记录(每条记录一页),所以整个系统的效率影响不大,等待中.....我现在想向各位请教第二次提取好的解决办法
      

  4.   

    修改:
    先感谢wartim兄,我想要的是如何处理不规则的地址,关键是有些地址并不还有区、街、路、巷、栋和号以及"-"关键字,我想能不能将所有的区写成一个数组、所有的街道、路,巷写成一个数组,然后截取地址中的字符串和数组中的项进行匹配?我是分层截取的,一个函数只截取一个地址元素,第一次提取的时候地址元素如果为空或者长度大于实际存在的元素长度的最大值的话进行第二次提取,比如系统在街道或路或巷的最大长度为3,提取的地址元素长度如果小于1大于3的话肯定是出错了,这时候开始进行第二次匹配提取,因为地址拆分的时候仅仅是在打印的时候进行,一次最多连续打印不会超过200条记录(每条记录一页),所以整个系统的效率影响不大,等待中..... 我现在想向各位请教第二次提取好的解决办法