|
最近在做业务,要求实现一个对数据进行动态条件判定的规则。
针对车辆上传的速度,根据每个用户不同的需求,动态的匹配超速规则。
比如:
有的用户,需要速度在80 -100 之间报警。
有的公户,要求在周一,三,五晚上,高度当前道路级别限速80%的时候报警。
有的用户需要在周末不允许车辆移动。
需求不断的变更,关于这样的条件排列组合,硬编码变的有些苍白。
于是在想,对于此类需求,可否整合出一个规则,也就是,无论什么情况,只要传入判断规则,即可获得true false。
如果简单的是一个顺序解析的从左到右的条件,可以简单的写一个C的词法分析。
但是考虑到()这种判断顺序的开发,条件树就得写的比较复杂。
于是想有什么讨巧的方法。
于是就有了如下的代码,借助shell来轻松搞定我的逻辑条件判定规则。
于是写了这么一个小shell脚本- #!/bin/bash
- Condition=$1
- str='if '$Condition'; then \n echo true \n else\n echo false \nfi;'
- str1=$(echo -e $str)
- #echo "$str1"
- eval "$str1"
复制代码 C代码通过管道,传递相应的条件代码
- #include<stdio.h>
- int main(int argc ,char *argv[])
- {
- FILE * fp;
- char buffer[80] = {'\0'};
- char command[500] = {'\0'};
- sprintf(command, "./test.sh '%s'", "[ 80 -gt 20 ] && [ 80 -lt 160 ]");
- fp=popen(command, "r");
- fgets(buffer,sizeof(buffer),fp);
- printf("%s", buffer);
- pclose(fp);
- return 0;
- }
复制代码 十几行,搞定这个需求。
测试了一下,性能还不错。
|
|