带有 +,-,*,/,(,) 符号的运算表达式,怎样才能验证书写得是否正确,有标准算法吗?我这几天搞这个头都搞大了。另外,如果是再包含 And,Or,=,<>,<,<=,>,>= 而构成的条件表达式呢?请大家救我于水深火热中啊,谢谢了。分数不够再加:)
解决方案 »
- delphi 控制Excel輸出到excel套版
- 磁盘容量不足,SQL插入操作CPU100%
- TListview 设置 ViewStyle = vsList 属性后,节点文本显示为省略号?
- cxtreelist不能编辑但可以复制里面的内容
- 怎么才可以启动服务?????????????
- 关于DateTimePicker1的问题
- dxDBGrid的使用问题,有用过的朋友进来帮忙!
- 招聘北京应届毕业生。。。!!!
- 谁有没有关于串口方面 的资料。如串口方面的组件等!高分相送
- 问一个很菜的问题,我自定义了一个过程,如何声明他?
- 用query对Porodox库操作的时候,能不能在sql语句中把字符串转换成时间日期类型的串进行比较,如果行,用什么函数呢?
- 存储过程问题:高手请看进。。。。。。。。。在线等待,即时结贴
给你两个思路1.利用sql 的表达式处理能力,
比如 select 3*(4+5)
这个很容易计算,并且验证语法2.利用window带的javascript 的ocx控件,凡是javascript支持的表达式语法他都支持。同样,逻辑运算他们也能处理
//驗證sValue的合法性(前後空格會去掉);返回錯誤碼,為空表sValue合法
function sFunGetErrMsg(sValue: string): string;
var
sTmp: string;
begin
sValue := Trim(sValue);
Result := '';
if sValue = '' then Exit; case sValue[1] of
'[':
begin
sTmp := sFunGetErrMsg1(sValue, '[');
if sTmp <> '' then
begin
Result := sTmp; Exit;
end;
end;
'{':
begin
sTmp := sFunGetErrMsg1(sValue, '{');
if sTmp <> '' then
begin
Result := sTmp; Exit;
end;
end;
'(':
begin
sTmp := sFunGetErrMsg2(sValue, 1);
if sTmp <> '' then
begin
Result := sTmp; Exit;
end;
end;
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
begin
sTmp := sFunGetErrMsg3(sValue, 1);
if sTmp <> '' then
begin
Result := sTmp; Exit;
end;
end;
'S': //'SUM'
begin
sTmp := sFunGetErrMsg4(sValue);
if sTmp <> '' then
begin
Result := sTmp; Exit;
end;
end;
else
begin //不合法字符
Result := 'Not valid Char'; Exit;
end;
end;
end;