2016-09-26 19 views
-2

2つの変数2016-V-0049と2016-V-0070があります。私はそれらを比較し、最後の数字を比較しながらそれらの間に欠けているデータをすべて得ることができる方法はありますか?この場合、結果は2016-V-0050,2016-V-0051,2016-V-0052 ...などになります。2つの値を比較してそれらの間のデータを取得

また、2016P13と2016P25(NumberWordNumber)を比較し、その間に不足している数字を表示するような繰り返しパターンを持つことができます。

私が試したことを含めて申し訳ありません。ここで私がやったことは何ですか?私は、より一般的なパターンを探していました。

string s = "2016-s-89"; 
string p = "2016-s-95"; 
var start = Convert.ToInt32(Regex.Match(s, @"\d+$").Value) +1; 
var end = Convert.ToInt32(Regex.Match(p, @"\d+$").Value); 
var index = Regex.Match(s, @"\d+$").Index; 
string data = s.Substring(0, index); 
List<string> newCases = new List<string>(); 
while (start < end) 
{ 
    string newCaseNumber = string.Format("{0}{1}", data, start); 
    newCases.Add(newCaseNumber); 
    start++; 
} 
+3

[お問い合わせ]をお読みになり、お試しください。あなたの問題の最初の部分は文字列から数値を取得し、2番目の部分は数値を保持する変数をインクリメントします。両方ともウェブとこのサイトで徹底的に文書化されています。 – CodeCaster

+1

2015-V-50と2016-V-60の間に欠損値はありますか? – Trifon

+2

「最後の数字を比較しながら、それらを比較して欠けているデータを取得する方法はありますか?」 - そうではありません特定;しかしもちろん、あなたが望んでいる文字列のタイプとまさに必要なものを正確に行うための非常に特殊なコードを書くことによって、 "方法があります"。あなたがそのコードの助けが必要な場合は、まずいくつかを書いてください。たとえば、文字列の操作を開始するには、 'string.Substring()'、 'regex.IsMatch()'、 'int.Parse()'などがあります。 – Quantic

答えて

0

あなたは、サブストリング()関数を使用して、このコードのように整数に変換する必要があります:

var min = "2016-V-0049"; 
    var max = "2016-V-0070"; 

    var a = min.Substring(7); 
    var b = max.Substring(7); 

    int convertableVariable1 = int.Parse(a); 
    int convertableVariable2 = int.Parse(b); 

    for (int i = convertableVariable1; i < convertableVariable2; i++){ 
      Console.WriteLine("2016-V-{0:0000}",i); 
    } 


    Console.WriteLine("Difference :{0}", convertableVariable2 - convertableVariable1); 
0

あなたが実際にあなたのコードが何をしたいのか、段階的に定義することができたら、実装はに簡単です研究とまとめ手順では、あなたがこれ欲しい:。

  1. Parse the input string denoting the starting numberを、ので、あなたが興味を持っている数値の一部を取得することができ
  2. 今、あなたは、数値文字列を持っているが、それはまだ文字列です。 Parse it to an integerのように、後で算術演算を行うことができます。
  3. 終了番号を示す文字列については、1 & 2を繰り返します。
  4. 開始番号と終了番号の間の番号をループし、元の文字列を新しい番号で再構築します。

それをする素朴な実装は次のようになります。

string inputStart = "2016-V-0049"; 
string inputEnd = "2016-V-0070"; 

string pattern = @"[0-9]{4}\-[A-Z]{1}\-([0-9]{4})"; 

var regex = new Regex(pattern); 

var match = regex.Match(inputStart); 
var numberStart = int.Parse(match.Groups[1].Value); 

match = regex.Match(inputEnd); 
var numberEnd = int.Parse(match.Groups[1].Value); 

for (int currentNumber = numberStart + 1; currentNumber < numberEnd; currentNumber++) 
{ 
    Console.WriteLine("2016-V-{0:0000}", currentNumber); 
}  

をしかし、これは、入力チェックを行いません(<終了を開始し、開始と終了は、実際のパターンに準拠)、サポートしていません。異なるパターン(パターンとリビルド文字列はハードコードされています)と、文字列の "2016-V-"部分が常に同じであると仮定します。

関連する問題