解析带有函数的字符串

问题描述

怎样解析带有函数的字符串比如:abs(abs(1)+2*(1+3))

解决方案

解决方案二:
你想要什么结果?
解决方案三:
引用楼主libo19872011的回复:

怎样解析带有函数的字符串比如:abs(abs(1)+2*(1+3))

用c#动态编译吧。。
解决方案四:
我实在datatable上进行操作的。就是在列之间进行的运算。比如:第二列值=abs(第一列)+2*(第二列值)之类的
解决方案五:
楼主搞编译原理吗?
解决方案六:
不是的啊,不知道这样功能怎样实现啊
解决方案七:
引用5楼libo19872011的回复:

不是的啊,不知道这样功能怎样实现啊

DataTable列表达式计算:有abs函数,表达式不支持abs函数///<summary>///采用DataTable的Columns属性的Expression属性计算表达式结果///</summary>//如下结构的数据表://A1A2A3A4A5A6//51223459087//567845325697//解析以下四个表达式://<1>A6=A1*1.5-A2//<2>A6=(A1+A2+A3+A4+A5)/5+SUM(A4)+AVG(A2)//<3>A6=IIF(A1>A2,A1+A2,A1-A2)//<4>A6=IIF(MAX(A1)>100ANDMIN(A3)>10,'0','1')privatevoidCalcExpressions(stringstrEx){//this.m_dt=>DataTable//this.m_bs=>BindingSourceif(strEx!=null&&strEx.Trim().Length>0){//按照"="拆解字符串intnIndex=strEx.IndexOf("=");if(nIndex!=-1){//计算表达式,并立即改写DataTable数据this.m_dt.Columns[strEx.Substring(0,nIndex).Trim()].Expression=strEx.Substring(nIndex+1,strEx.Length-nIndex-1).Trim();//修改数据后,强制UI刷新数据this.m_bs.ResetBindings(false);}}}

这个如何:C#的动态编译,并返回结果///<summary>///采用动态编译,计算表达式的结果///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidbutton6_Click(objectsender,EventArgse){//声明要计算C#代码,要求必须完整的C#代码stringstrCode=@"usingSystem;namespaceParseEx{publicclassParseExC{publicstaticdoubleGetValue(){return1+5*8-(Math.Sin(12)*2.5);}}}";CodeDomProvidercomp=newCSharpCodeProvider();CompilerParameterscp=newCompilerParameters();StringBuildercodeBuilder=newStringBuilder();codeBuilder.AppendLine(strCode);cp.ReferencedAssemblies.Add("System.dll");cp.GenerateExecutable=false;cp.GenerateInMemory=true;CompilerResultscr=comp.CompileAssemblyFromSource(cp,codeBuilder.ToString());if(cr.Errors.HasErrors){MessageBox.Show("Error!");}else{Assemblya=cr.CompiledAssembly;if(a!=null){Typet=a.GetType("ParseEx.ParseExC");if(t!=null){//因为是静态调用,不需要创建实例了//objectmode=a.CreateInstance("Mode");MethodInfomi=t.GetMethod("GetValue",BindingFlags.Static|BindingFlags.Public);if(mi!=null){doubled=(double)mi.Invoke(null,null);MessageBox.Show(d.ToString());}}}}}

解决方案八:
花了点时间弄好的。不过现在不打算开源。类似于excel中的函数。
解决方案九:
toisjoe这个怎样发图片啊我的问题想给你截图说明
解决方案十:
toisjoe怎样发图片啊,我的问题想通过我的截图给你说明啊
解决方案十一:
引用8楼libo19872011的回复:

toisjoe这个怎样发图片啊我的问题想给你截图说明

听说需要在博客中把图传上去,然后把地址拷贝到这里来。
解决方案十二:
toisjoe怎样发图片啊,我的问题想通过截图给你说明。
解决方案十三:
toisjoehttp://writeblog.csdn.net/PostList.aspx
解决方案十四:
toisjoe[img=http://writeblog.csdn.net/PostList.aspx][/img]
解决方案十五:
http://www.cnblogs.com/michaelhuwei/archive/2008/03/26/1123401.html早就开源了,支持函数的解析
解决方案:
引用14楼huwei001982的回复:

http://www.cnblogs.com/michaelhuwei/archive/2008/03/26/1123401.html早就开源了,支持函数的解析

这个就不错,挺适合你的
解决方案:
我的函数不光是数学函数还有一些其他函数,例如球字符串的长度:Length("我们是");之类的if(char.IsDigit(c)){ProcDigit(refi,refstrExpression);}else//其它的字符全当成函数{ProcFunc(refi,refstrExpression);}break;他把参数值也当成函数啊
解决方案:
他那个可以扩充。我写的是用在一个项目上。功能支持函数嵌套。循环。返回object对象。参数也可以是object对象。支持一切c#写的函数。不过函数重载还在考虑加不加上。那个有点影响效率。这个只是那个项目很小的一部分。暂时没开算开源。将来不打算混淆。不开源,不免费,不混淆。
解决方案:
引用16楼libo19872011的回复:

我的函数不光是数学函数还有一些其他函数,例如球字符串的长度:Length("我们是");之类的if(char.IsDigit(c)){ProcDigit(refi,refstrExpression);}else//其它的字符全当成函数{ProcFunc(refi,refstrExpression);}brea……

看看我给你的C#动态编译吧,比较适合,稍微改改就可以了
解决方案:
toisjoe如果我想调用string类里面的函数这块怎写?usingSystem;namespaceParseEx{publicclassParseExC{publicstaticdoubleGetValue(){return1+5*8-(Math.Sin(12)*2.5);}}}";
解决方案:
return1+5*8-(Math.Sin(12)*2.5);

只要你写的语句符合C#语法,就可以通过并返回结果
解决方案:
我刚才看了看http://www.cnblogs.com/michaelhuwei/archive/2008/03/26/1123401.html里面写的计算表达式的代码,稍加修改就可以支持Length("我们是")这样的函数。
解决方案:
toisjoe不知道怎样写参数是字符串类的函数,希望你指点。我的qq476155749.想要获得你更多的指点。

时间: 2024-10-31 17:02:42

解析带有函数的字符串的相关文章

解析C++中的字符串处理函数和指针_C 语言

C++字符串处理函数 字符串连接函数 strcat 其函数原型为 strcat(char[],const char[]); strcat是string catenate(字符串连接)的缩写.该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面.第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改.连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址.例如: char str1[30]=″Peo

jsoup解析html某段字符串获取不了,应该是转义问题,但不知道如何解决,求帮助

问题描述 jsoup解析html某段字符串获取不了,应该是转义问题,但不知道如何解决,求帮助 http://pan.baidu.com/wap/share/home?uk=3306425232&third=0 这是我用jsoup解析的一个url地址,解析其中一段class为该页面信息: 控制台输出如下 <div class="pages complete-pages" xmlns="http://www.w3.org/1999/xhtml"> &

浅谈PHP解析URL函数parse_url和parse_str_php实例

PHP中有两个方法可以用来解析URL,分别是parse_url和parse_str. parse_url 解析 URL,返回其组成部分 mixed parse_url ( string $url [, int $component = -1 ] ) 本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分. 本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分.不完整的 URL 也被接受,parse_url() 会尝试尽量正确地将其解析. 参数 url

Java解析php函数json_encode unicode的编码问题

这篇文章主要介绍了java解析php函数json_encode unicode 编码问题,需要的朋友可以参考下. android开发中在和服务器端接口对接时出现编码问题,从服务器端获取到的数据是 "\u8bbe\u59071ID-\u8bbe\u59071\u540d\u79f0;\u8bbe\u59073id-\u8bbe\u59073\u540d\u79f0;\u8bbe\u59077id-\u8bbe\u59077\u540d\u79f0" 接口是通过php函数中json_enc

imagegetter-android4.2 在listview中解析带有img标签的html,并显示在textview中

问题描述 android4.2 在listview中解析带有img标签的html,并显示在textview中 代码均在listeview的适配器里,主要代码如下: public View getView(int position, View v, ViewGroup parent) { LiveContextHolder lvcHolder; if (v == null) { v = inflater.inflate(R.layout.live_contxt_item, null); lvcHo

java按字节截取带有汉字的字符串的解法(推荐)_java

由于接口使用的oracle字段长度为固定字节数,然后传进来的字符串估计比数据库字段的总字节数要大,那么截取小于数据库字节数的字符串. 自己参考网上的例子,整了个递归调用就可以了,因为截取的字符字节长度必须小与数据库的字节长度,即如果最后一个字符为汉字,那么只能去掉往前截取. /** * 判断传进来的字符串,是否 * 大于指定的字节,如果大于递归调用 * 直到小于指定字节数 ,一定要指定字符编码,因为各个系统字符编码都不一样,字节数也不一样 * @param s * 原始字符串 * @param

PHP中一些可以替代正则表达式函数的字符串操作函数_php技巧

0x01:根据预定义的字符对字符串进行词法分析 复制代码 代码如下: <?php /*  * 在处理大量信息时,正则表达式函数会使速度大幅减慢.应当在需要使用正则表达式解析比较复杂的字符串时才能使用这些函数.如果要解析简单的表达式,还可以采用很多可以显著加快处理过程的预定义函数.  */ /*  * 根据预定义的字符对字符串进行词法分析  * strtok()函数根据预定义的字符列表来解析字符串.其形式为:  * string strtok(string str,string tokens)  

PHP strstr 函数判断字符串是否否存在的实例代码_php基础

PHP strstr 定义和用法 strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. 语法 strstr(string,search) 参数 描述 string 必需.规定被搜索的字符串. search 必需.规定所搜索的字符串.如果该参数是数字,则搜索匹配数字 ASCII 值的字符. 提示和注释 注释:该函数是二进制安全的. 注释:该函数对大小写敏感.如需进行大小写不敏感的搜索,请使用 st

指令-linux 批量替换带有空格的字符串

问题描述 linux 批量替换带有空格的字符串 将多个文件中的 //#define LOG 0 批量替换成 #define LOG 0 求linux指令,或者是一个脚本 重复写一遍: 将多个文件中的 //#define LOG 0 批量替换成 #define LOG 0 求linux指令,或者是一个脚本 解决方案 替换a.txt中的 sed -i "s@//#define LOG 0@#define LOG 0@" a.txt 解决方案二: 直接字符串匹配 用python的string