第11回 文字列の数式を解析して計算する
公開日:2018-07-25 更新日:2019-05-14
[メモ帳作成講座]
1. 内容
1. 選択した数式を計算する機能の追加
数式を選択して、右クリックメニューの「計算します」をクリックすると、数式を計算して、結果を文字列として挿入します。
double で扱っているため誤差があります。
また、独自の解析方法のため、もっと良いやり方や、不具合がある可能性もございますのでご了承ください。
現在使える演算子と関数は、+、-、/、*、!、π、E(指数表記用)、sin、cos、√(ルート) です。
double で扱っているため誤差があります。
また、独自の解析方法のため、もっと良いやり方や、不具合がある可能性もございますのでご了承ください。
現在使える演算子と関数は、+、-、/、*、!、π、E(指数表記用)、sin、cos、√(ルート) です。
2. 動画
数式の解析方法の説明
プログラムの説明
プログラムの説明
3. 補足
今回はあえて独自処理で数式を計算していますが、node.js を使用して、JavaScript を使うと簡単に計算できます。
1. node.js のインストール
node.js の公式サイト にアクセスして、Windows Binary (.zip) をダウンロードして解凍します。
解凍時にファイル名が長すぎてエラーになる場合は、zipのファイル名を短くしてから解凍してください。
解凍すると、node.exe が作成されます。
これを、自分のアプリの exe と同じ場所にコピーしてください。
解凍時にファイル名が長すぎてエラーになる場合は、zipのファイル名を短くしてから解凍してください。
解凍すると、node.exe が作成されます。
これを、自分のアプリの exe と同じ場所にコピーしてください。
2. C#側
node.js に、実行する JavaScript のファイル名と、計算する数式を渡します。
private void button1_Click(object sender, EventArgs e)
{
var formula = "(1+2)*3"; //計算したい数式
var result = Calc(formula); //計算
Console.WriteLine(result); //計算結果の出力
}
private string Calc(string formula) {
var processStartInfo = new ProcessStartInfo {
FileName = "node.exe",
Arguments = "calc.js \"" + formula + "\"",
CreateNoWindow = true, //画面を非表示にします
RedirectStandardOutput = true, //戻り値を取得するための設定
UseShellExecute = false //戻り値を取得するための設定
};
var process = Process.Start(processStartInfo);
var result = process.StandardOutput.ReadToEnd();
return result;
}
3. JavaScript側
上記の C# の Calc() を実行すると、calc.js が実行されます。
process.argv[0] には node.exe のフルパス、
process.argv[1] には calc.js のフルパス、
process.argv[2] には 計算する数式が入るので、
eval() に process.argv[2] を渡して計算させます。
process.argv[0] には node.exe のフルパス、
process.argv[1] には calc.js のフルパス、
process.argv[2] には 計算する数式が入るので、
eval() に process.argv[2] を渡して計算させます。
console.log(eval(process.argv[2]));
4. 画面
5. 今後の課題
1. 見出しリストの表示
テキストの左側に見出しリストを表示して、クリックされたら本文中の見出しのある位置にカーソルを移動できるようにします。
2. 変換機能
10進数・16進数の変換をポップアップメニューで行えるようにする。
3. grep
指定されたキーワードを含むファイルを検索して一覧で表示する。
そして、一覧でダブルクリックされたら、そのファイルを開くようにする。
そして、一覧でダブルクリックされたら、そのファイルを開くようにする。
4. その他
タブ化、操作の記憶と再生、バイナリーファイル対応、ファイルツリー・リストを付けた3ペイン構成にする、プラグインでテキストの加工を行えるようにする、プラグインでカレンダーをつけて日記をつけられるようにする、などなど。
ダウンロード
ver | 実行ファイル | ソース |
---|---|---|
1.0.10 2018/07/25 | ncm_1_0_10.zip | ncm_1_0_10_src.zip |