C++怎样执行保存在字符串中的语句!

vcminusminus 2009-08-03 05:36:53
VC中使用ADO+SQLSERVER2000做数据库应用。因为客户的需求偶尔要改变,所以客户要求有一项功能就是允许客户自定义多个计算公式或修改已经设置的公式,并且要求在DataGrid中修改的记录时候根据公式立即更新。
举个简单的例子如工资核算:
假设计算公式为:
实发工资 = 应发工资 - 扣除费用
ADO的RecordSet的fields(0)表示实发工资、fields(1)表示应发工资、fields(2)表示扣除费用。
用户设置的计算公式保存在字符串中,如下:
CString cFormula("fields(0)=fields(1)-fields(2)");

问题是:在VC++中怎样让cFormular中保存的"fields(0)=fields(1)-fields(2)"表达式执行?说白了,就是怎样执行一个字符串中的语句,例如"int a = 1+2;"。
以前用VFP的时候做这个非常简单,使用VFP的宏代换(&)功能就行,例如:
Local cExpr as string
cExpr = "fields(0)=fields(1)-fields(2)"
&cExpr.
用VFP就这么简单,VC++怎么实现类似的功能?不要告诉我编译型的语言没有这个功能,解释型的语言才有,C++可是史上最牛的语言啊,连这个都实现不了?
...全文
415 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
DarkChampion 2009-08-06
  • 打赏
  • 举报
回复
还是用脚本来做吧,Python,Lua都不错
vcminusminus 2009-08-06
  • 打赏
  • 举报
回复
多谢各位的热心帮助!
qingcairousi 2009-08-04
  • 打赏
  • 举报
回复
想实现么?不怕麻烦的话,用boost::spirit吧,C++的方式就是自己语法和语义分析来干这个事情
hai040 2009-08-04
  • 打赏
  • 举报
回复
如果仅仅是数据库数据操作的话
可以根据公式生成sql语句
应该简单很多
babyboy 2009-08-04
  • 打赏
  • 举报
回复
以为语言无所不能的,永远只能做语言的奴隶。
语言只是个工具,给了你一把锯子,给你了木板,难道你做不出凳子来?
v2002750 2009-08-04
  • 打赏
  • 举报
回复
最牛又不是无所不能的意思,楼主先去洗个冷水头,清醒清醒再来把。
asksgp 2009-08-04
  • 打赏
  • 举报
回复
这样的话相当于自己写个简单的编译器了,难度可不小啊;楼主看看是否有别的方法,比如脚本处理类似问题。。。
baihacker 2009-08-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 vcminusminus 的回复:]
非常感谢大家的热情回复,其实客户可以设置的公式不止是数值计算,还可能有字符串的连接、替换等等,甚至有?:这个三元操作符,总之客户设置的公式可能很简单,也可能很复杂,解析这个公式不太容易。

to : taodm ,以前用VC的时候没遇到过这种情况,只是这次是数据库应用,才第一次遇到表达式解析问题,原以为...唉!

谢谢积极参与的朋友们!

这个帖子周末再结,看看哪位朋友能把这个问题深入地展开一下。
[/Quote]
嵌入脚本引擎...引擎都是别人写好的了...只需要去调用
yyyapple 2009-08-04
  • 打赏
  • 举报
回复
弄个脚本解释器吧
mu_yang 2009-08-04
  • 打赏
  • 举报
回复
写个可以递归编译的编译器

vcminusminus 2009-08-04
  • 打赏
  • 举报
回复
非常感谢大家的热情回复,其实客户可以设置的公式不止是数值计算,还可能有字符串的连接、替换等等,甚至有?:这个三元操作符,总之客户设置的公式可能很简单,也可能很复杂,解析这个公式不太容易。

to : taodm ,以前用VC的时候没遇到过这种情况,只是这次是数据库应用,才第一次遇到表达式解析问题,原以为...唉!

谢谢积极参与的朋友们!

这个帖子周末再结,看看哪位朋友能把这个问题深入地展开一下。
paulpeath 2009-08-04
  • 打赏
  • 举报
回复
建议不采用表达式分析,复杂,语义的定义分析都很麻烦。
是否采用如下思路:
DataGrid的公式为规范的符合SQLSERVER2000语法的公式,执行时将其作为文本,通过与update、select结合形成执行语句,让ado执行之,可得楼主结果。
taodm 2009-08-04
  • 打赏
  • 举报
回复
最牛又不是无所不能的意思。楼主先去洗个冷水澡,清醒清醒再来吧。
bucherren 2009-08-04
  • 打赏
  • 举报
回复
我们也需要做这个,最后是用数据库做的
mymtom 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 stardust20 的回复:]
感觉可以参考下这个
http://topic.csdn.net/u/20090703/20/ed837eb4-9e35-4a18-9675-751fc377da91.html?58487
[/Quote]
UP,
mymtom 2009-08-03
  • 打赏
  • 举报
回复
表达式求值?
wuwusansan 2009-08-03
  • 打赏
  • 举报
回复
自己编程序就能实现的
Recker1 2009-08-03
  • 打赏
  • 举报
回复
用_asm嵌入汇编。
yshuise 2009-08-03
  • 打赏
  • 举报
回复
词法,语法,语法制导,语义分析。
(错字太多,重新打上)
yshuise 2009-08-03
  • 打赏
  • 举报
回复
分两遍(编译器实际上都是多遍,比如此法/语法/与法制导等等)
加载更多回复(7)

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧