|
分類:[C#]
こんにちは。
早速ですが、質問があります。
クリップボードのなかに数式があったら計算して結果をクリップボードに返すソフトを作ろうと考えています。
(5×10+2)/(15-2)=
みたいな文字列をコピーすると、
(5×10+2)/(15-2)=13
となり、ペーストできるというイメージです。
大まかな方針として、次のように考えました。
けっこうめんどうそうなのですが、ひょっとしてもっと簡単にできる方法ってありますか?
int.Parse(数)みたいにすると、計算もしてくれるとかって、あるんでしょうか?
if (Clipboard.ContainsText())
string clipboardText = Clipboard.GetText();
// 数式かどうかを判定する。
if (Regex.Match(clipboardText,"[()0-9]+[+-×*/][()0-9+-*/=]+").Success)
// ()の前後で改行して配列に入れる。
string[] lines = clipboardText.Replace("(","\n(").Replace(")","\n)").Split('\n');
foreach(string line in lines)
//( )でくくられているところを探す。
if (line.Contains("(") && line.Contains(")"))
//演算記号の前後を「 」でわける。
string[] cells = line.Split(' ');
//( 5 × 10 + 2 )
//( 15 - 2 ) となる
foreach(string cell in cells)
//数字にする。int.Parse(cell)
//四則演算する。こんな方法でできるのかな。
int calicurate = cell[0] cell[1] cell[2] ………
// 5 × 10 + 2 となる。
//ぜんぶ1行にまとめる。
// 52 / 13となる。
//またわける。
//くり返し。
//()がなくなったら終了。
って感じかな〜と想像して、
書けば書けそうなんですけど、
すこしちゅうちょしてます。
なんとなく中身はこうなるんじゃないか、と考えて書いてみたんですけど、
ぜんぜん違っていたりしたら、アドバイスいただけるとうれしいです。
よろしくお願いします。
|