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
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.