私は文字列全体をスキャンコードを書いている条件文への文
SET RESULT = C>(X-2)?(A+B):C
次のように条件文に
SET RESULT = IF(C>(X-2), (A+B), C) //IF C< X-2 return A+B otherwise return C
以下のようにIF
声明を変換しようとしていた場合に変換し、出現の外観はIF
,(
および,
である。私のアルゴリズムが動作していないここでは、このような
SET RESULT = IF(C>(X-2), IF(P>C,2,3),C)
以下のようにする場合がある以上1つのIF
文はコードでは、私は、これは複雑なシナリオのために働くかどうかわからない...
string data = "SET RESULT=IF(C>(X-2), (A+B), C)";
string output = string.Empty;
int indexofIF = data.IndexOf("IF");
int obCount = 0;
int cbCount = 0;
if (indexofIF > -1)
{
string script = data.Substring(indexOfIF, (data.Length-indexOfIF-1))
for(int index=0; index<script.Length; index++)
{
int obIndex = data.IndexOf('(', index);
if(obIndex>-1)
obCount++;
int cbIndex = data.IndexOf(')', index);
if(cbIndex>-1)
cbCount++;
if(obCount==cbCount)//Found the end of If statement
{
string tempData = data.Substring(0, index);
int count = tempData.Count(f => f == ',');//Get the number of occurences of ','
if (count == 2)//There are only 2 commas
{
int firstIndex = tempData.IndexOf(',');
int lastIndex = tempData.LastIndexOf(',');
string condtion = tempData.Substring(3, (firstIndex - 4));
string trueCond = tempData.Substring(firstIndex + 1, (lastIndex - firstIndex - 1));
string falseCond = tempData.Substring(lastIndex + 1, (index - lastIndex - 1));
output = condtion + "?" + trueCond + ":" + falseCond;
}
else //More than 2 commas
{
}
}
}
}
です。これを行うには他の方法がありますか?おそらくregex
またはその他の文字列置換操作を使用している可能性があります。
任意のネストされた括弧の一致は通常の言語ではないため、問題の領域を制限しない限り、純粋な正規表現の解決策は見つかりません。 –
@RaymondChen - 私が正規表現の仕事をする唯一の方法は、固定データの括弧に入力データを制約することでした。これは実行可能な解決策ではありません。 –
FWIW、Perl5のいわゆる「正規表現」と、それから借りてきた多くの言語のものは、再帰補間を使用して、任意にネストされたデリミタのペアと実際にマッチすることができます。私は実際にそれを行うことをお勧めしません。私はC#は、とにかくできるとは思わない。 –