「文字列の計算式の計算結果を取得する」へのコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=programing%2Feval.html 「文字列の計算式の計算結果を取得する」に投稿されたコメントの一覧 ja https://dobon.net/banner/dbs1.gif http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=programing%2Feval.html 「文字列の計算式の計算結果を取得する」へのコメント 88 31 通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=programing%2Feval.html#26 mXParserでは大量のレコードでメモリリークのような現象が発生しました。

DataTableで10万レコードの計算処理をしたところ2秒かからなかったため、かなり優秀でした。

DataTableで計算する場合、式文字列は不正だと例外が発生するので、とりあえずtry catch内で実施しました。
ただし、式文字列は不正なものを渡さないようにする必要はあります。

また、Computeの結果はobjectで受け、数字にするにはdecimal.TryParseをして変換する必要があります。

式とそのパラメータは動的な場合が多いですが、それは自力で置換する必要があります。

---
decimal[] array = new decimal[100000];

DataTable dataTable = new DataTable();
object? result = null;

for (int k = 0; k < 100000; k++) {
result = null;
decimal value = 0;

// 式文字列
string expressionString = (k + 1).ToString() + "+1.1";

// dataTable.Computeのみtry catchで実施
try {
result = dataTable.Compute(expressionString, "");
} catch (Exception e) {
Console.WriteLine(e);
}

if (result != null) {
decimal.TryParse(result.ToString(), out value);
}

array[k] = value;
}
---]]>
Wed, 09 Feb 2022 14:33:42 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&id=programing%2Feval.html#26
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#25
NCalcとDataTableを試してみましたが、使い物になりませんでした。
まず、NCalcは更新が止まっていて、それを引き継いだ人のプロジェクトがありましたが、NCalcは自分でDLL化して参照しないといけなかったです。

また、2つともDoubleに変換するのにparseしないといけないです。
不正な場合は例外が発生してしまいます。

ここにはないですが、mXParserが一番優秀なパーサーでした。

mXParser
http://mathparser.org/

書き方が少し複雑ですが、parseの問題がなく、つねにDoubleで取得できることと、不正な場合はNaNになります。]]>
Sun, 23 Jan 2022 09:45:04 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#25
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#23 http://pastie.org/10540605
http://pastebin.com/wLjD7RjB
リンク切れ対策。どちらも内容は同じ]]>
Mon, 09 Nov 2015 21:20:20 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#23
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#22 DataTable.Compute がお手軽なんですが、つかえる演算子、関数が限られているんですね。
http://point56.blogspot.jp/2008/03/vbdatatableselect.html]]>
Sun, 08 Nov 2015 11:03:57 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#22
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#21 math関数部分は元々自前で計算してました
jscriptの中で出来るわけないですよね(^^;]]>
Sun, 23 Mar 2014 19:30:53 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#21
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#20 JScriptCodeProviderは参照が無いと言われCSharpCodeProviderは問題ありそうなので試してないですが
Microsoft Script Controlは関数がかなり足りなくて(POWとかACOSとか)
DataTable.Computeも全然関数無くて…
Mathの関数諦めればいけるんですけど…
(VSAは出来たんですけど)]]>
Sun, 23 Mar 2014 16:21:17 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#20
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#19 (VSAなら出来たんですけど古い方法だとか文句つけられるし…)
全部試してみるしかないか…]]>
Sun, 23 Mar 2014 15:01:54 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#19
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#18 Sat, 08 Jun 2013 11:50:03 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#18 通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#17 Wed, 09 Jan 2013 22:33:25 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#17 評価の理由 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#15 助かりました、以前も参照させてもらいました。ありがとうございます。]]> Tue, 27 Mar 2012 15:01:30 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#15 評価の理由 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#14 Microsoft Script Controlを使用した方法をVB2008で
動作を確認できました。
非常にうれしいです。]]>
Tue, 13 Sep 2011 10:25:23 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#14
評価の理由 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#12 MSDN Japanの「アルゴリズム入門:第1章 Visual C# による文字列処理入門」のものを動かしましたが、最初にカッコがあると(?)うまく動きませんね。
(1+1)*2 って入れるとそのまま計算式が出てきます。
そのうち解析してみますが。]]>
Thu, 30 Sep 2010 18:10:57 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#12
通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#11 Sat, 14 Aug 2010 20:52:56 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#11 通常のコメント http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#10 Sat, 14 Aug 2010 19:54:55 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#10 評価の理由 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#9 正にこれを知りたかった!
ありがとうございます!!]]>
Thu, 10 Jun 2010 11:23:42 +0900 http://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#9