回 帖 发 新 帖 刷新版面

主题:请问怎样将一个表达式经计算后(字符串)赋值给一个布尔值变量?

string str="1+1=2"
bool x=str
该使用什么函数呢?请指教,谢谢!

回复列表 (共9个回复)

沙发

什么意思?
string str="1+1=2"
这里x就为1
string str="1+1=3"
这里x就为0?

板凳

为什么非要和字符串绑在一起
x=((1+1)==2);
这样不好么?

3 楼

没办法啊,因为“1+1=2”只是举一个简单例子,其实是从两个表,两个字段中取出来的,下面是实际情况:
请教下面这个例子怎么用C#来实现,问题在于instr,eval这两个函数C#中都没有,,而且这种算法巨慢,算一次半小时,哪位高手帮我看看,谢谢! 
成品编码8位,因各种统计的需要(例:工资计算)每月要将入库的成品进行分类,下面是我在ACCESS的VBA中的解决办法(能区分大小写):   
① 工资计算成品分类表(400行左右): 
工序  单价      组合规则                         判定字符串        
钣金    3     X系列 且 不含(A颜色)    instr(1,'X',Mid(成品编码, 2,1),0) AND  NOT(instr(1,'TKV',Mid(成品编码,7,1),0))   
钣金    4   A花边 且 B颜色                  instr(1,'ABE',Mid(成品编码,5,1),0) AND instr(1,'UMQv',Mid(成品编码,7,1),0) 
钣金    2   X系列 且 不含(A颜色 或 A花边)   instr(1,'X',Mid(成品编码,2,1),0) AND NOT(instr(1,'TKV',Mid(成品编码,7,1),0) OR instr(1,'ABE',Mid(成品编码,5,1),0))    

② 工资计算表(5000行左右) 
批号          型号         数量 
00001      1XWSARU5         50 
00002      1B32A5v0         80 


Set aa = CurrentDb.OpenRecordset("工资计算表") 
aa.movefirst 
st = "SELECT * FROM 工资计算成品分类表 WHERE ((yn('" & aa!型号 & "',[判定字符串]))=-1)" 
Set cc = CurrentDb.OpenRecordset(st) 


Public Function YN(xinhao As String, guize As String) As Boolean   
‘xinhao(型号),guize(判定字符串) 
If Not IsNull(xinhao) And Not IsNull(guize) Then 
guize = Replace(guize, "成品编码", "'" & xinhao & "'")     ‘从工资计算表中取具体型号替换“成品编码” 
YN = Eval(guize)                                             ‘用EVAL函数判定判定字符串是否成立 
End If 
End Function 

4 楼

Eval方法的任何通用实现都是超慢的。
如果只是简单的四则运算的话,你可以考虑自己实现(二叉树即可)。
如果你想找对应的函数的话,你可以考虑一下Microsoft.JScript空间下的Eval类,不过速度不要太过苛求了(能算就行)。

5 楼

那么C#中该怎么引用Microsoft.JScript空间下的Eval呢?下面的代码通不过:
using Microsoft.JScript;


string s="1+1=2";
Bool x=Microsoft.JScript.Eval(s);
MessageBox.Show(x);

6 楼

参见msdn,注意:Eval是一个类不是方法

7 楼

我用了类的实例化也不行,提示重载Eval方法未获取0参数
String s="1+1=2";
Eval E1 = new Eval();
bool X = E1.eval(s);
MessageBox.show(X.ToString());

8 楼

请先仔细阅读msdn

其次,方法是Eval.JScriptEvaluate

9 楼

老问题解决了,我网上找的,有兴趣的朋友可以看看:
http://blog.joycode.com/ninputer/archive/2005/04/05/47003.aspx

我的这么调用的:
            string st = "1+1=2";
            bool a = (bool)Evaluator.Eval(st);
            //Console.WriteLine(a.ToString());
            MessageBox.Show(a.ToString());
但又有了新问题:st字符串变量如果有引号,就不能运行,我用了单引号也不行,如:string st="mid('12345',3,1)='3'",这语法该怎么写呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册