主题:请问怎样将一个表达式经计算后(字符串)赋值给一个布尔值变量?
jsjdn
[专家分:20] 发布于 2006-06-05 16:55:00
string str="1+1=2"
bool x=str
该使用什么函数呢?请指教,谢谢!
回复列表 (共9个回复)
沙发
zyxdna [专家分:1250] 发布于 2006-06-05 19:00:00
什么意思?
string str="1+1=2"
这里x就为1
string str="1+1=3"
这里x就为0?
板凳
zyxdna [专家分:1250] 发布于 2006-06-05 19:01:00
为什么非要和字符串绑在一起
x=((1+1)==2);
这样不好么?
3 楼
jsjdn [专家分:20] 发布于 2006-06-05 20:27:00
没办法啊,因为“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 楼
jzyray [专家分:20610] 发布于 2006-06-05 21:41:00
Eval方法的任何通用实现都是超慢的。
如果只是简单的四则运算的话,你可以考虑自己实现(二叉树即可)。
如果你想找对应的函数的话,你可以考虑一下Microsoft.JScript空间下的Eval类,不过速度不要太过苛求了(能算就行)。
5 楼
jsjdn [专家分:20] 发布于 2006-06-06 01:07:00
那么C#中该怎么引用Microsoft.JScript空间下的Eval呢?下面的代码通不过:
using Microsoft.JScript;
…
string s="1+1=2";
Bool x=Microsoft.JScript.Eval(s);
MessageBox.Show(x);
6 楼
jzyray [专家分:20610] 发布于 2006-06-06 13:20:00
参见msdn,注意:Eval是一个类不是方法
7 楼
jsjdn [专家分:20] 发布于 2006-06-06 15:59:00
我用了类的实例化也不行,提示重载Eval方法未获取0参数
String s="1+1=2";
Eval E1 = new Eval();
bool X = E1.eval(s);
MessageBox.show(X.ToString());
8 楼
jzyray [专家分:20610] 发布于 2006-06-06 18:15:00
请先仔细阅读msdn
其次,方法是Eval.JScriptEvaluate
9 楼
jsjdn [专家分:20] 发布于 2006-06-07 08:33:00
老问题解决了,我网上找的,有兴趣的朋友可以看看:
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'",这语法该怎么写呢?
我来回复