想写一个命名的方法
要求如下,
第一个命名为A,第二个为B依此类推,当第二十六个命名为Z的时候,第二十七个命名为AA,二十八为AB,二十九为AC。依此类推,一直命名到AZ,下一个命名则为AAA,反复重复这一命名方法。
有点类似于excel的列名。
有没有哪位大侠有例子或者思路什么的
先拜谢了

解决方案 »

  1.   

    说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
    ABA-ABZ这样的excel的列名方法
      

  2.   


    说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
    ABA-ABZ这样的excel的列名方法
      

  3.   


    说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
    ABA-ABZ这样的excel的列名方法
      

  4.   

    public string GetHighVersion(string oldVersion)
                {
                    string return_str = string.Empty;
                    Regex _reg=new Regex (@"(?i)([a-z]*?)([a-z])$");
                    Match m=_reg.Match(oldVersion);
                    string begin_str = m.Groups[1].Value;
                    string end_str = m.Groups[2].Value;
                    return_str+=begin_str.ToUpper();
                    if (!string.IsNullOrEmpty(end_str))
                    {
                        if (end_str.Equals("Z", StringComparison.InvariantCultureIgnoreCase))
                        {
                            return_str += "AA";
                        }
                        else
                        {
                            byte[] array = new byte[1];
                            array = System.Text.Encoding.ASCII.GetBytes(end_str); //string转换的字母
                            int asciicode = (short)(array[0]);
                            array[0] = (byte)(++asciicode); //ASCII码强制转换二进制
                            return_str += Convert.ToString(System.Text.Encoding.ASCII.GetString(array)).ToUpper();
                        }
                    }
                    return return_str;
                }
    调用 string sss = null;
                    sss=GetHighVersion("a");//B
                    sss = GetHighVersion("aa");//AB
                    sss = GetHighVersion("z");//AA
                    sss = GetHighVersion("az");//AAA
      

  5.   


    说的不太对,是当命名出现AA-AZ这个范围之后,再出现的是BA-BZ,一直排到ZA-ZZ,再次出现就是AAA-AAZ
    ABA-ABZ这样的excel的列名方法
      

  6.   

    相当于是递增的26进制的数字嘛,应该不难吧 逻辑上真没有什么问题自定义一个类,
    用最简单的用数组char[]存储命名,索引0表示右数第一位,1表示右数第二位,依次。
    然后取每个元素的ascii码,来获取具体的字符
    定义一个获取数组表示的字符串的方法
    再自定义一个+操作符或者加法方法,用以对当前表示的字符串命名递增一次。没什么难的啊。
      

  7.   

    不知道对不对 public string AddColNameByOld(string oldName)

    //oldName = "Z"
            // 定义一个 A-Z的数组
    string []strArray = {"A","B","C","D",...,"Z"};
    chart []nameArray = oldName.ToCharArray();
    int nameIndex = 0;
    string returnStr = string.Empty;

    for(int i = 0; i < nameArray.Length; i++)
    {
    int currentVal = 0;
    for(int j = 0; j < strArray.Length; j++)
    {
    if(nameArray[i].ToString().Trim().Equals(strArray[j].Trim()))
    {
    currentVal = j;
    nameIndex *=  currentVal;
    break ; 
    }
    }

    }
    nameIndex ++ ;
    if(nameIndex > 25)
    {

    returnStr = strArray[nameIndex % 26];
    int round = 0 ;
    for(int k = nameIndex, k >= 1; k /= 26)
    {
    if(k == 1)
    {
    if(round < 26)
    {
    returnStr = strArray[round]+ returnStr;
    }
    else
    {
    returnStr = strArray[round % 26]+ returnStr;
    k = round ;
    round = 0;
    }
    }
    round ++ ;
    }
    }
    else
    {
    returnStr =  strArray[nameIndex].Trim();
    }
    //return AA
    return returnStr;
      

  8.   


    /// <summary>
    /// 获取第n个
    /// </summary>
    /// <param name="n"></param>
    /// <returns></returns>
    string GetString(int n)
    {
        const int BASE = 'A' - 1;
        string s = string.Empty;
        while (n > 0)
        {
    int r = n % 26;
    if (r == 0)
        r = 26;
    s = (char)(BASE + r) + s;
    n -= r;
    n /= 26;
        }
        return s;
    }/// <summary>
    /// 获取下一个或几个
    /// </summary>
    /// <param name="s"></param>
    /// <param name="n"></param>
    /// <returns></returns>
    string GetNext(string s, int n = 1)
    {
        const int BASE = 'A' - 1;
        int len = s.Length;
        int r = 0;
        for (int i = 0; i < len; i++)
        {
    r += (s[i] - BASE) * (int)Math.Pow(26, len - i - 1);
        }
        return GetString(r + n);
    }
      

  9.   

    修改下 
    char []nameArray = oldName.ToCharArray();
      

  10.   

    可以拆分
    public string AddColNameByOld(string oldName)
    {
    //oldName = "Z"
    string []strArray = {"A","B","C","D",...,"Z"};
    char []nameArray = null;
    int nameIndex = 0;
    string returnStr = string.Empty;
    nameArray = oldName.ToCharArray();
    for(int i = 0; i < nameArray.Length; i++)
    {
    int currentVal = 0;
    for(int j = 0; j < strArray.Length; j++)
    {
    if(nameArray[i].ToString().Trim().Equals(strArray[j].Trim()))
    {
    currentVal = j;
    nameIndex *=  currentVal;
    break ; 
    }
    }

    }
    nameIndex ++ ;
    if(nameIndex > 25)
    {

    returnStr = strArray[nameIndex % 26];
    int round = 0 ;
    for(int k = nameIndex, k >= 1; k /= 26)
    {
    if(k == 1)
    {
    if(round < 26)
    {
    returnStr = strArray[round]+ returnStr;
    }
    else
    {
    returnStr = strArray[round % 26]+ returnStr;
    k = round ;
    round = 0;
    }
    }
    round ++ ;
    }
    }
    else
    {
    returnStr =  strArray[nameIndex].Trim();
    }
    //return AA
    return returnStr;
    }
      

  11.   

    修改 
    nameIndex *=  currentVal;
    =>
    nameIndex = (nameIndex != 0?nameIndex:1)* currentVal;