<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
<channel>
<title>「文字列の計算式の計算結果を取得する」へのコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html</link>
<description>「文字列の計算式の計算結果を取得する」に投稿されたコメントの一覧</description>
<language>ja</language>
<image>
<url>https://dobon.net/banner/dbs1.gif</url>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html</link>
<title>「文字列の計算式の計算結果を取得する」へのコメント</title>
<width>88</width>
<height>31</height>
</image>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;id=programing%2Feval.html#26</link>
<description><![CDATA[以前にコメントを書かせて頂いたmXParserの内容を訂正致します。<br>mXParserでは大量のレコードでメモリリークのような現象が発生しました。<br><br>DataTableで10万レコードの計算処理をしたところ2秒かからなかったため、かなり優秀でした。<br><br>DataTableで計算する場合、式文字列は不正だと例外が発生するので、とりあえずtry catch内で実施しました。<br>ただし、式文字列は不正なものを渡さないようにする必要はあります。<br><br>また、Computeの結果はobjectで受け、数字にするにはdecimal.TryParseをして変換する必要があります。<br><br>式とそのパラメータは動的な場合が多いですが、それは自力で置換する必要があります。<br><br>---<br>decimal[] array = new decimal[100000];<br><br>DataTable dataTable = new DataTable();<br>object? result = null;<br><br>for (int k = 0; k &lt; 100000; k++) {<br>    result = null;<br>    decimal value = 0;<br><br>    // 式文字列<br>    string expressionString = (k + 1).ToString() + &quot;+1.1&quot;;<br><br>    // dataTable.Computeのみtry catchで実施<br>    try {<br>        result = dataTable.Compute(expressionString, &quot;&quot;);<br>    } catch (Exception e) {<br>        Console.WriteLine(e);<br>    }<br><br>    if (result != null) {<br>        decimal.TryParse(result.ToString(), out value);<br>    }<br><br>    array[k] = value;<br>}<br>---]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#25</link>
<description><![CDATA[こちらの情報は古いかもしれませんのでコメントに記載させて頂きます。<br><br>NCalcとDataTableを試してみましたが、使い物になりませんでした。<br>まず、NCalcは更新が止まっていて、それを引き継いだ人のプロジェクトがありましたが、NCalcは自分でDLL化して参照しないといけなかったです。<br><br>また、2つともDoubleに変換するのにparseしないといけないです。<br>不正な場合は例外が発生してしまいます。<br><br>ここにはないですが、mXParserが一番優秀なパーサーでした。<br><br>mXParser<br>http://mathparser.org/<br><br>書き方が少し複雑ですが、parseの問題がなく、つねにDoubleで取得できることと、不正な場合はNaNになります。]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#23</link>
<description><![CDATA[自作の計算式実行クラスを置いておきます。<br>http://pastie.org/10540605<br>http://pastebin.com/wLjD7RjB<br>リンク切れ対策。どちらも内容は同じ]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#22</link>
<description><![CDATA[いつもお世話になっています。<br>DataTable.Compute がお手軽なんですが、つかえる演算子、関数が限られているんですね。<br>http://point56.blogspot.jp/2008/03/vbdatatableselect.html]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#21</link>
<description><![CDATA[すみませんとんでもない勘違いでした<br>math関数部分は元々自前で計算してました<br>jscriptの中で出来るわけないですよね(^^;]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#20</link>
<description><![CDATA[試してみたけど詰んでますねえ…<br>JScriptCodeProviderは参照が無いと言われCSharpCodeProviderは問題ありそうなので試してないですが<br>Microsoft Script Controlは関数がかなり足りなくて(POWとかACOSとか)<br>DataTable.Computeも全然関数無くて…<br>Mathの関数諦めればいけるんですけど…<br>(VSAは出来たんですけど)]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#19</link>
<description><![CDATA[DataTable.Computeを使う方法ではCOS等の関数が使えませんでした<br>(VSAなら出来たんですけど古い方法だとか文句つけられるし…)<br>全部試してみるしかないか…]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#18</link>
<description><![CDATA[とても役に立ちました。]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#17</link>
<description><![CDATA[「Visual C# による文字列処理入門」がリンク切れです。http://msdn.microsoft.com/ja-jp/cc998600.aspx に移ったようです。]]></description>
</item>
<item>
<title>評価の理由</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#15</link>
<description><![CDATA[評価：良い<br>助かりました、以前も参照させてもらいました。ありがとうございます。]]></description>
</item>
<item>
<title>評価の理由</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#14</link>
<description><![CDATA[評価：良い<br>Microsoft Script Controlを使用した方法をVB2008で<br>動作を確認できました｡<br>非常にうれしいです。]]></description>
</item>
<item>
<title>評価の理由</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#12</link>
<description><![CDATA[評価：良い<br>MSDN Japanの「アルゴリズム入門:第1章 Visual C# による文字列処理入門」のものを動かしましたが、最初にカッコがあると（？）うまく動きませんね。<br>(1+1)*2 って入れるとそのまま計算式が出てきます。<br>そのうち解析してみますが。]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#11</link>
<description><![CDATA[間違えました。すいません。]]></description>
</item>
<item>
<title>通常のコメント</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#10</link>
<description><![CDATA[Microsoft Visual Studio 2010では使えなかった]]></description>
</item>
<item>
<title>評価の理由</title>
<link>https://dobon.net/cgi-bin/pc/pc.php?mode=v&amp;amp;id=programing%2Feval.html#9</link>
<description><![CDATA[評価：良い<br>正にこれを知りたかった！<br>ありがとうございます！！]]></description>
</item>
</channel>
</rss>