C#で英数字IDを特定の値だけインクリメントする最良の方法は何ですか?
例えば:
345FAS310E575896325SA があり、 123 ずつインクリメントするので、結果は345FAS310E575896325SA123になります。
または、345FAS310E575896325SA123と 234 ずつインクリメントすると、結果は345FAS310E575896325SA357になります。
それを機能させる「最も安い」方法は何ですか?
C#で英数字IDを特定の値だけインクリメントする最良の方法は何ですか?
例えば:
345FAS310E575896325SA があり、 123 ずつインクリメントするので、結果は345FAS310E575896325SA123になります。
または、345FAS310E575896325SA123と 234 ずつインクリメントすると、結果は345FAS310E575896325SA357になります。
それを機能させる「最も安い」方法は何ですか?
これは私のアルゴリズムです:
static void Main(string[] args)
{
var id = "843342D4343DA123D";
var intSummand = 10;
Console.WriteLine(AddToStringId(id, intSummand));
Console.ReadKey();
}
static string AddToStringId(string id, int summand)
{
// set the begin-pointer of for the number to the end of the original id
var intPos = id.Length;
// go back from end of id to the begin while a char is a number
for (int i = id.Length - 1; i >= 0; i--)
{
var charTmp = id.Substring(i, 1).ToCharArray()[0];
if (char.IsNumber(charTmp))
{
// set the position one element back
intPos--;
}
else
{
// we found a char and so we can break up
break;
}
}
var numberString = string.Empty;
if (intPos < id.Length)
{
// the for-loop has found at least one numeric char at the end
numberString = id.Substring(intPos, id.Length - intPos);
}
if (numberString.Length == 0)
{
// no number was found at the and so we simply add the summand as string
id += summand.ToString();
}
else
{
// cut off the id-string up to the last char before the number at the end
id = id.Substring(0, id.Length - numberString.Length);
// add the Increment-operation-result to the end of the id-string and replace
// the value which stood there before
id += (int.Parse(numberString) + summand).ToString();
}
// return the result
return id;
}
ここで誰もが抱えている問題は、英数字の値が実際には何も意味しないということです。
あなたがあなたの例を与えるとき、あなたはただ最後に数字を加えてそれらを増やすだけです、あなたは実際に文字が何を表すかについての情報を私たちに与えていません。
このように値をインクリメントできるようにするには、文字の値を知る必要があります。良い例はHEX、0-9 A-Fであるため、HEX値09を1ずつインクリメントするとすると次のようになります。 0Aおよび0Fを1インクリメントすると、10が得られます。
私はこれが答えではないことを知っていますが、あなたがこれで達成しようとしていることについての本当の情報を私たちに与えるまで、私たちは本当に答えを与えることができません。また、これを何に使用しているのか、なぜAlphaNumericなどを使用しているのか教えてください。
あなたの例を見て、私はそれを次のように解釈します:
ID がサフィックスされていない場合は、追加する必要があります。それ以外の場合は、ID をインクリメントする必要があります。
private static void Main(string[] args)
{
var id = IncrementId("345FAS310E575896325SA", 123); // AS310E575896325SA123
var id2 = IncrementId(id, 234); //345FAS310E575896325SA357
}
public static string IncrementId(string value, int id)
{
// you might want to use fixed length or something else
int suffixPos = value.IndexOf("SA");
// no id has been appended
if (value.Length == suffixPos + 2)
return value + id;
// increment the existing id.
var currentId = int.Parse(value.Substring(suffixPos + 2));
currentId += id;
return value.Substring(0, suffixPos + 2) + currentId;
}
部分文字列メソッド?インクリメントしたい数値を渡すと、インクリメントされた値のサブストリングが取得され、それらが加算されますか?
増分が99を超えるとどうなりますか?
英数字IDの末尾に100を追加するだけですか?
また、残りの英数字IDは同じままですか?すなわち:
843342D4343DA123D 10
843342D4343DA123D 20