मैं अब थोड़ी देर के लिए इस के साथ काम किया गया है और इस कॉलम कि AZ से परे जाना, या यहाँ तक ए.ए. जेडजेड परे के लिए वास्तव में अच्छा काम करने के लिए मिल गया ... यह पूरा किया है में अलग हर किरदार को तोड़कर स्ट्रिंग और पुनरावर्ती रूप से एएससीआईआईआई चरित्र (कम 64) के डीईसी मूल्य को प्राप्त करने के लिए बुला रहा है, फिर इसे 26^एन द्वारा गुणा कर रहा है। लंबे समय तक की वापसी मान एक संभावित सीमा को पार करने के लिए इस्तेमाल किया गया था जब n> 4.
public long columnNumber(String columnName)
{
char[] chars = columnName.ToUpper().ToCharArray();
return (long)(Math.Pow(26, chars.Count() - 1)) *
(System.Convert.ToInt32(chars[0]) - 64) +
((chars.Count() > 2) ? columnNumber(columnName.Substring(1, columnName.Length - 1)) :
((chars.Count() == 2) ? (System.Convert.ToInt32(chars[chars.Count() - 1]) - 64) : 0));
}
इसके अलावा
, यदि आप उलटा (यानी columnNumber में गुजरती हैं और columnName मिल प्राप्त करना चाहते हैं, यहाँ कुछ कोड है कि उस के लिए काम करता है।
public String columnName(long columnNumber)
{
StringBuilder retVal = new StringBuilder();
int x = 0;
for (int n = (int)(Math.Log(25*(columnNumber + 1))/Math.Log(26)) - 1; n >= 0; n--)
{
x = (int)((Math.Pow(26,(n + 1)) - 1)/25 - 1);
if (columnNumber > x)
retVal.Append(System.Convert.ToChar((int)(((columnNumber - x - 1)/Math.Pow(26, n)) % 26 + 65)));
}
return retVal.ToString();
}
स्रोत
2012-01-17 13:19:24
अच्छा! ! –
वास्तव में अच्छा, आदमी। मैं यह कर रहा था, लेकिन विधि इस सरल समाधान से बड़ा तरीका था। –
धन्यवाद। और हाँ, मुझे लगता है कि यह बहुत आसान लगता है, हालांकि किसी भी अनुकूलन का सुझाव देने के लिए स्वतंत्र महसूस करें ... – Noldorin