Parser for signed overpunch values?

前端 未结 7 1383
南旧
南旧 2021-01-06 01:19

I am working with some old data imports and came across a bunch of data from an external source that reports financial numbers with a signed overpunch. I\'ve seen alot, but

7条回答
  •  庸人自扰
    2021-01-06 01:59

    Here are two other approaches, so you have more alternatives to choose from:

    public static int Overpunch2Int_v1(string number)
    {
        number = number.ToLower();
        char last = number.Last();
        number = number.Substring(0, number.Length - 1);
        if (last == '}' || (last >= 'j' && last <= 'r'))
        {
            number = "-" + number;
            if (last == '}')
                number += "0";
            else
                number += (char)(last - 'j' + '1');
        }
        else if (last == '{' || (last >= 'a' && last <= 'i'))
        {
            if (last == '{')
                number += "0";
            else
                number += (char)(last - 'a' + '1');
        }
    
        return Int32.Parse(number);
    }
    
    public static int Overpunch2Int_v2(string number)
    {
        number = number.ToLower();
        char last = number.Last();
        number = number.Substring(0, number.Length - 1);
    
        if (last >= '{')
            number = (last == '}'? "-" : "") + number + "0";
        else if (last >= 'a' && last <= 'r')
        {
            bool isNegative = last >= 'j';
            char baseChar = isNegative ? 'j' : 'a';
            number = (isNegative ? "-" : "") + number + (char)(last - baseChar + '1');
        }
    
        return Int32.Parse(number);
    }
    

    Please note that both methods don't validate the string and expect a valid number.

提交回复
热议问题