我需要找到一个快速,轻量级的表达式解析器.
理想情况下,我想传递一个名称/值对列表(例如变量)和一个包含要评估的表达式的字符串.我需要的只是一个真/假值.
表达式的类型应该是:
varA == "xyz" and varB==123
Run Code Online (Sandbox Code Playgroud)
基本上,只是一个简单的逻辑引擎,其表达式在运行时提供.
更新
至少需要支持==,!=,>,> =,<,<=
关于速度,我希望每个请求大约执行5个表达式.我们会看到附近的某个地方/请求一秒钟.我们当前的页面往往在50ms以内执行.通常,任何表达式中只涉及2或3个变量.但是,我需要在执行之前将大约30加载到解析器中.
更新2012/11/5
有关性能的更新.我们近2年前实施了nCalc.从那以后,我们扩大了它的使用范围,使得我们在帖子背面平均覆盖300多个变量的40多个表达式.现在每秒发生数千次回发,性能严重下降.
我们还扩展了它,包括一些额外的功能,同样没有性能损失.简而言之,nCalc满足了我们的所有需求并超出了我们的预期.
我有一个看起来像这样的表:
AccountID, ItemID
1, 100
1, 200
2, 300
Run Code Online (Sandbox Code Playgroud)
我有一个proc接受一个表值参数,该参数更新与帐户关联的项目.我们将传递以下内容:
AccountID, ItemID
3, 100
3, 200
Run Code Online (Sandbox Code Playgroud)
proc类似于:
procedure dbo.MyProc( @Items as dbo.ItemListTVP READONLY )
AS
BEGIN
MERGE INTO myTable as target
USING @Items
on (Items.AccountId = target.AccountId)
AND (Items.ItemId = target.ItemId)
WHEN NOT MATCHED BY TARGET THEN
INSERT (AccountId, ItemId)
VALUES (Items.AccountId, Items.ItemId)
;
END
Run Code Online (Sandbox Code Playgroud)
根据传入的数据,我希望它能在表中添加2条新记录.
我想要的是有一个WHEN NOT MATCHED BY SOURCE子句,它将删除不匹配的指定帐户的项目.
例如,如果我通过
AccountID, ItemID
1, 100
1, 400
Run Code Online (Sandbox Code Playgroud)
然后我希望它删除1,200的记录; 但是留下所有其他人.
如果我这样做:
WHEN NOT MATCHED BY SOURCE THEN
DELETE; …Run Code Online (Sandbox Code Playgroud) 如果我用MariaDB服务器(Maria和XtraDB存储)而不是MySQL(MyISAM和InnoDB)替换MySQL 5.1服务器,那么大多数MySQL客户端软件(包括用PHP 5.2和Java SE 1.6制作的应用程序)......
我有两个表中的数据.
第一个表有一个名为PKID的主键
PKID DATA
0 myData0
1 myData1
2 myData2
Run Code Online (Sandbox Code Playgroud)
第二个表将表1中的PKID列作为外键
PKID_FROM_TABLE_1 U_DATA
0 unique0
0 unique1
0 unique2
1 unique3
1 unique4
1 unique5
2 unique6
2 unique7
2 unique8
Run Code Online (Sandbox Code Playgroud)
我现在正在制作的基本SELECT语句是
SELECT a.PKID, a.DATA, b.U_DATA
FROM table1 as a
INNER JOIN table2 as b
ON a.PKID = b.PKID_FROM_TABLE_1
Run Code Online (Sandbox Code Playgroud)
这会生成一个这样的表:
PKID DATA U_DATA
0 myData0 unique0
0 myData0 unique1
0 myData0 unique2
1 myData1 unique3
1 myData1 unique4
1 myData1 unique5
2 myData2 unique6
2 myData2 unique7
2 myData2 unique8 …Run Code Online (Sandbox Code Playgroud) 我目前正在几个项目中使用Yahoo YUI javascript库.
但是,我有点担心三件事.首先,他们解雇了10%的员工.其次,他们的股价持续下跌:特别是在今年早些时候无视MS收购之后.第三,如果有人买了它们怎么办?
我提出这个问题的唯一原因是我倾向于构建将要存在8到10年的应用程序.
你会怎么做?
我是C#的新手,我已经开始使用了StreamReader.我试图一次读取一行文件,并在匹配特定关键字"I/RPTGEN"时输出该行.
到目前为止,我想出了如何将整个文件读成字符串,但我无法弄清楚如何一次只读一行.
到目前为止我的代码是这样的.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class Test
{
public static void Main()
{
try
{
using (StreamReader sr = new StreamReader("c:/temp/ESMDLOG.csv"))
{
String line = sr.ReadToEnd();
Console.WriteLine(line);
Console.ReadLine();
}
}
catch (Exception e)
{
Console.WriteLine("The File could not be read:");
Console.WriteLine(e.Message);
Console.ReadLine();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,这里是文件中一行的示例.
咨询,2/27/2013 12:00:44 AM,I/RPTGEN(cadinterface),I/RPTGEN失败 - 错误500 - 内部服务器错误 - 为报告请求返回(检查URL的日志).
我在JavaScript中有一个约会,它的价值就是这样
Fri Apr 01 2011 05:00:00 GMT + 0530(印度标准时间){}
现在,将日期转换为.NET日期的最佳方法是什么.请注意,我的客户端用户可能是世界各地的用户.我将从那里获得日期,现在我需要将其转换为.NET日期.你能帮助我吗 ?
我想在我们的一个网站上添加一个按钮,允许用户通过我们的错误跟踪系统提交错误.
其中一个功能请求是发送相关页面的屏幕截图.
如果没有在最终用户机器上安装,我该怎么办?javascript是否有某种屏幕上限api?
我在sql中有一个循环,它做了一些事情
begin tran one
do some inserts in others tables
--start loop
begin tran two
--do something
begin try
--if something fail then a trigger does rollback and this return a error (and this goes to catch), then don't i need do the rollbak in catch? this could not be dissable because this is working on production
--something finished ok
commit tran two
end try
begin catch
rollback tran two
end catch
--finished loop
commit
----------
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
在批处理结束时检测到不可提交的事务.该事务被回滚.
begin tran …Run Code Online (Sandbox Code Playgroud) 有时我需要确定某个整数是偶数.因此我可以使用以下代码:
int number = /* magic initialization here */;
// make sure the number is even
if ( number % 2 != 0 ) {
number--;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有被非常有效的最有效的方式做到这一点,所以我可以做到以下几点:
int number = /* magic initialization here */;
// make sure the number is even
number &= ~1;
Run Code Online (Sandbox Code Playgroud)
但(除了不可读)我不确定该解决方案是否完全可移植.
注意:此代码应该只适用于正整数,但有一个解决方案也适用于负数将是一个加号.