主题:请问怎样将一个表达式经计算后(字符串)赋值给一个布尔值变量?
			
 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'",这语法该怎么写呢?
							 
									
			
我来回复