PDA

View Full Version : سوال: اجراي فرمان محاسباتي در زمان اجراي برنامه



hero4000
دوشنبه 17 اسفند 1388, 15:55 عصر
با سلام خدمت دوستان و اساتيد عزيز
من برنامه اي نوشتم که در اون لازم است در قسمتهايي از برنامه اعمال محاسباتي موجود در يک متغير متني اعمال شود و جواب حاصل از محاسبات در متغير ديگري ريخته شود
لطفا اگر اين سوالم منطقي و شدني است پاسخ دهيد

Mani_rf
دوشنبه 17 اسفند 1388, 16:50 عصر
سوالت را دقیق تر مطرح کن ؛ دقیقا چه اعمال محاسباتی را می خوای انجام بدی؟

saied_genius
دوشنبه 17 اسفند 1388, 17:09 عصر
اين هم يک dll که خودم نوشتم براي اجراي string به عنوان command

نحوه استفاده:

saiedDelshad09131041838Evaluate.Evaluate.Eval("رشته جهت اجرا به عنوان دستور"); مثال


saiedDelshad09131041838Evaluate.Evaluate.Eval("MessageBox.Show(\"Test\");"); نمي دانم منظورت همين بود يا چيز ديگري بود.

البته dll به زبان C#‎‎‎‎ است ، مثال هم به زبان C#‎‎‎‎ است ، ولي قابل استفاده در VB.Net هم هست!!

سوالي بود در خدمتم.
موفق باشيد.

hero4000
سه شنبه 18 اسفند 1388, 17:43 عصر
با تشکر از شما من نميخواهم دستورات خاصي در رشته اجرا بشود فقط کافيه مثلا رشته زير را محاسبه کند

Msgbox (function("2+3"))
منظورم از function همان تابعي است که بايد رشته را محاسبه کنه و ميخواهم مسجباکس نمايش داده شده عدد 5 رو نمايش بده

saied_genius
سه شنبه 18 اسفند 1388, 17:52 عصر
سلام

باز هم نياز به dll من داريد.

بايد به شکل زير استفاده کنيد.


Msgbox (function(int.Parse(Evaluate.Eval("2+3").ToString())))

سوالي بود در خدمتم.

موفق باشيد.

hero4000
چهارشنبه 19 اسفند 1388, 17:01 عصر
با تشکر از شما دوست عزيز بنده اين کار رو در حال حاضر انجام ميدم به وسيله ارسال دستور اسکيوال و جواب رو ميگيرم ولي چون اين عمل شايد در هر قسمت نزديک به پنج شش هزار بار شايد لازم باشه انجام بشه فکر کردم شايد جور ديگه سرعت بالاتر بره ولي اگه بخوام پاي دي ال ال رو وسط بکشم ممکنه سرعت حتي پايينتر بياد ميخواستم با کدنويسي کمتر و عمليات کوتاهتر کار انجام بشه
ممنون ميشم اگه دستور مستقيم رو بهم بدين
بازم از درخواستم شرمندم

saied_genius
چهارشنبه 19 اسفند 1388, 17:10 عصر
سلام

يک خط دستور نيست ، اگر يک خط (يا حتي 50 خط) بود مي دادم.

کاري که انجام مي شود اين است که ، بايد رشته خوانده شود ، پردازش شود و مطابق دستورات Net. از داخل آن فرمان مورد نظر تشخيص داده شود.

کار راحتي نيست که بشود با چند خط کد حلش کرد.

بهترين (شايد هم تنها) راه همين باشد ، ثانياً استفاده از DLL نسبت به کد مستقيم ، اگر کمتر زمان بر نباشد ، همان اندازه زمانبر است.

موفق باشيد.

hero4000
چهارشنبه 19 اسفند 1388, 18:13 عصر
يعني حتي براي محاسبه "2+3" هم بايد خيلي دستور نوشت

شايد براي محاسبه هاي سبک مثل جمع و تفريق دستور تک خطي يا دو خطي باشه

ممنون ميشم اگه کمکم کنيد

saied_genius
چهارشنبه 19 اسفند 1388, 18:52 عصر
ببين عزيزم ، من اگر راه حل کوتاهي بود (1 يا دو خط) مطمئن باش بهت مي گفتم.

سورس dll را هم اگر بهت بدهم ، فرقي به حال شما براي استفاده نمي کند.

مسئله جمع و تفريق نيست ، مسئله اين است که قراره يک رشته اي که نمي دونيم توش چي بکار رفته پردازش بشه ، راه حل آن هم شبيه سازي کامپايلر براي اجراي دستور موجود در رشته است.

يه سر به اين لينک ها بزن:
http://www.c-sharpcorner.com/uploadfile/mgold/codedomcalculator08082005003253am/codedomcalculator.aspx

http://stackoverflow.com/questions/333737/c-evaluating-string-342-yield-int-18

http://msdn.microsoft.com/en-us/library/system.math.sign%28VS.71%29.aspx

و اما راه حل ساده تر :
توجه :: به شر ط آنکه يک عملگر وجود داشته باشد (براي هر عملگر بايد اين عمليات تکرار شود)

شما مي توانيد از string.split براي تبديل رشته خود به آرايه اي از رشته ها تبديل کنيد ، سپس هر عضو آرايه را به عدد تبديل کنيد و عملگر را بر روي آنها اعمال کنيد.

گفتنش راحته ، اما باز هم کار راحت و اصولي نيست ، چون فقط در حالتي خوب جواب مي دهد که : اولاً تمامي عملگرهاي شما از يک نوع باشند (تا مشکل حق تقدم نداشته باشيد)، دوماً پرانتز نداشته باشد (تا باز هم مشکل حق تقدم و مشکلات ديگر نداشته باشيد) و سوماً مشکلاتي که توي کار پيش مي آيد.

پس ...

نتيجه اخلاقي: استفاده از همان dll از همه نظر به صرفه تر است.

من شايد نزديک به دو هفته وقت گذاشتم تا اين dll از آب در آمد ، بنابراين نمي توانم سورس در اختيارتان بگذارم.

بازهم مي گويم ، اگر به 1 يا 2 خط بود ، حتماً بهتون مي دادم.

شايد دوستان راه حل بهتري داشته باشند.

در هر صورت ، سوالي بود در خدمتم.

موفق باشيد.