CN106874243B - 基于字符串的公式处理方法及装置 - Google Patents

基于字符串的公式处理方法及装置 Download PDF

Info

Publication number
CN106874243B
CN106874243B CN201611192712.3A CN201611192712A CN106874243B CN 106874243 B CN106874243 B CN 106874243B CN 201611192712 A CN201611192712 A CN 201611192712A CN 106874243 B CN106874243 B CN 106874243B
Authority
CN
China
Prior art keywords
formula
character
data structure
structure set
character string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201611192712.3A
Other languages
English (en)
Other versions
CN106874243A (zh
Inventor
施杨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201611192712.3A priority Critical patent/CN106874243B/zh
Publication of CN106874243A publication Critical patent/CN106874243A/zh
Application granted granted Critical
Publication of CN106874243B publication Critical patent/CN106874243B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Document Processing Apparatus (AREA)

Abstract

本发明提供一种基于字符串的公式处理方法及装置,属于计算机技术领域。该方法包括:基于公式配置表,获取待处理的字符串公式;对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;根据数据结构集合,计算获得字符串公式对应的计算结果。本发明通过基于公式配置表,获取待处理的字符串公式。对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合。根据整理后的数据结构集合,计算字符串公式对应的计算结果。由于可基于公式配置表编辑字符串公式且可对字符串公式进行配置,按照通用的公式处理流程对所有字符串公式进行处理,从而实现了公式与代码解耦,并相应地减少了工作量,节省了时间与人力。因此,公式处理的效率较高。

Description

基于字符串的公式处理方法及装置
技术领域
本发明涉及计算机技术领域,更具体地,涉及一种基于字符串的公式处理方法及装置。
背景技术
目前,在许多程序开发中都需要对一些公式作处理。例如,在Flash脚本制作中,需要用到许多数学或物理公式。由于对公式的处理方式影响着开发效率,从而如何对公式进行处理是开发人员关注的问题。现有的公式处理方法主要是针对某一问题,确定需要使用的公式。基于确定的公式逻辑,在程序编入相应的代码。
在实现本发明的过程中,发现现有技术至少存在以下问题:由于公式与代码耦合,当对公式进行修改时,需要对公式对应的代码进行跟踪调试,从而会造成大量繁琐操作,耗费时间与人力。因此,公式处理的效率较低。
发明内容
本发明提供一种克服上述问题或者至少部分地解决上述问题的基于字符串的公式处理方法及装置。
根据本发明的一方面,提供了一种基于字符串的公式处理方法,该方法包括:
基于公式配置表,获取待处理的字符串公式;
对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;
根据数据结构集合,计算获得字符串公式对应的计算结果。
根据本发明的另一方面,提供了一种基于字符串的公式处理装置,该装置包括:
第一获取模块,用于基于公式配置表,获取待处理的字符串公式;
遍历模块,用于对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;
计算模块,用于根据数据结构集合,计算获得字符串公式对应的计算结果。
本申请提出的技术方案带来的有益效果是:
通过基于公式配置表,获取待处理的字符串公式。对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合。根据整理后的数据结构集合,计算获得字符串公式对应的计算结果。由于可基于公式配置表编辑字符串公式且可对字符串公式进行配置,并按照通用的公式处理流程对所有的字符串公式进行处理,从而实现了公式与代码解耦,并相应地减少了工作量,节省了时间与人力。因此,公式处理的效率较高。
附图说明
图1为本发明实施例的一种基于字符串的公式处理方法的流程示意图;
图2为本发明实施例的一种基于字符串的公式处理方法的流程示意图;
图3为本发明实施例的一种基于字符串的公式处理装置的结构示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
在目前的很多软件系统中都需要对一些公式作处理,如在财务系统,税务系统,HR系统以及很多工业应用系统。或者,在程序开发过程中也需要对公式进行处理,如Flash脚本文件的开发。但在上述过程中对公式的处理都没有一种通用的处理机制,都只能解决各自的问题。相应地,代码的重用程度不高、后期的维护复杂度加大、模块的可扩展性较低且对公式的支持单一,从而导致产品的易用性不好,软件的研发成本增加。在通常的产品研发过程中,无论是软件平台部分还是产品开发部分,也需要对一些公式处理的效率指标进行分析、需要对用户数据的公式进行跟踪调试,如果产品中存在很多不同公式解析方法,要作一个统一的分析处理是一件费力且费时的事情。
基于上述内容,现有的公式处理方法主要是针对某一问题,确定需要使用的公式。按照公式的公式逻辑,在程序中编入相应的代码。当对公式进行更改时,需要修改程序中相应的代码。由现有的公式处理过程可知,公式与代码耦合的,公式变动会造成代码变动。因此,在对公式进行修改时,需要对公式对应的代码进行跟踪调试。例如,公式可能需要专业人员调试,专业人员将调试的公式给程序员。程序员按照调试的公式修改程序代码,专业人员看程序代码的输出结果与预算的公式输出结果是否一致。如果不一致,那程序员与专业人员反复讨论沟通,再一起调试,直到达到双方都想要的调试结果。
由上述过程可知,该过程会造成大量的繁琐操作,且耗费时间与人力。因此,公式处理的效率较低。
针对现有技术中的问题,本发明实施例提供了一种基于字符串的公式处理方法。参见图1,本实施例提供的方法流程包括:101、基于公式配置表,获取待处理的字符串公式;102、对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;103、根据数据结构集合,计算获得字符串公式对应的计算结果。
本发明实施例提供的方法,通过基于公式配置表,获取待处理的字符串公式。对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合。根据整理后的数据结构集合,计算获得字符串公式对应的计算结果。由于可基于公式配置表编辑字符串公式且可对字符串公式进行配置,并按照通用的公式处理流程对所有的字符串公式进行处理,从而实现了公式与代码解耦,并相应地减少了工作量,节省了时间与人力。因此,公式处理的效率较高。
作为一种可选实施例,基于公式配置表,获取待处理的字符串公式之前,还包括:
获取用户输入的公式标识及参数;
在公式配置表中查找公式标识对应的字符串公式;
根据参数对查找到的字符串公式进行配置。
作为一种可选实施例,对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合,包括:
按照字符串公式中字符的顺序,检测字符串公式中每一字符的类型;
对于字符串公式中的任一字符,当检测到任一字符的类型为字母时,对字母的后续字符类型进行检测,直到检测到字符类型不为字母的字符为止,将字母及后续字符类型连续为字母的字符作为函数名,并按照顺序加入到数据结构集合中;
当检测到任一字符的类型为数字时,对数字的后续字符类型进行检测,直到检测到字符类型不为数字的字符为止,将数字及后续字符类型连续为数字的字符作为一个数字,并按照顺序加入到数据结构集合中;
当检测到任一字符的类型为运算符时,将运算符按照顺序加入到数据结构集合中。
作为一种可选实施例,根据数据结构集合,计算获得字符串公式对应的计算结果之前,还包括:
对数据结构集合中的元素进行整理。
作为一种可选实施例,对数据结构集合中的元素进行整理,包括:
对数据结构集合中的每一元素进行检测,去除数据结构集合中多余的括号元素。
作为一种可选实施例,对数据结构集合中的元素进行整理,包括:
对于数据结构集合中的任一负号元素,当任一负号元素为数据结构集合中的第一个元素时,在任一负号元素的前面增加一个数字元素-1,并作为数据结构集合中的第一个元素,同时将任一负号元素修改为乘号元素;
当任一负号元素不为数据结构集合中的第一个元素时,若任一负号元素的前一个元素不为后括号元素且不为数字元素,同时任一负号元素的下一个元素为数字元素,将下一个数字元素乘以-1的运算结果作为任一负号元素新的下一个元素,并从数据结构集合中删除任一负号元素;
当任一负号元素不为数据结构集合中的第一个元素时,若任一负号元素的前一个元素为前括号元素或者逗号元素,在任一负号元素的后面插入一个乘号元素,并作为任一负号元素的下一个元素,同时将任一负号元素修改为数字元素-1。
作为一种可选实施例,根据数据结构集合,计算获得字符串公式对应的计算结果,包括:
对数据结构集合中的每一元素进行递归遍历;
基于递归遍历过程,对数据结构集合中的每一元素进行计算处理,得到字符串公式对应的计算结果。
作为一种可选实施例,基于递归遍历过程,对数据结构集合中的每一元素进行计算处理,得到字符串公式对应的计算结果,包括:
当遍历到为数字的任一元素时,基于任一元素的后续运算符元素及运算符的优先级,计算任一元素与后续元素之间的运算结果;
对任一元素与其它参与运算的后续元素进行合并,将运算结果作为合并得到的运算结果元素,并将运算结果元素置入数据结构集合中继续进行递归遍历,直到得到字符串公式对应的计算结果。
作为一种可选实施例,基于递归遍历过程,对数据结构集合中的每一元素进行计算处理,得到字符串公式对应的计算结果,包括:
当遍历到为函数名的任一元素时,基于任一元素后续的相关参数元素,计算任一元素对应的函数值;
对任一元素与后续的相关参数元素进行合并,将函数值作为合并得到的函数值元素,并将函数值元素置入数据结构集合中继续进行递归遍历,直到得到字符串公式对应的计算结果。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
基于上述图1对应实施例中的内容,本发明实施例提供了一种基于字符串的公式处理方法。其中,该方法处理主体为字符串公式。例如,“-10+2*3+max(-5,1)”可以为待处理的字符串公式。在该字符串公式中除了常规四则运算之外,还包括带两个参数的函数。当然,字符串公式还可以包含不带参数、带一个参数或带三个参数等不同参数数量的函数,本实施例对此不作具体限定。参见图2,本实施例提供的方法流程包括:201、基于公式配置表,获取待处理的字符串公式;202、对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;203、对数据结构集合中的元素进行整理;204、根据整理后的数据结构集合,计算获得字符串公式对应的计算结果。
其中,201、基于公式配置表,获取待处理的字符串公式。
为了解耦公式与代码,实现让编辑公式的专业人员与程序开发的程序员分工处理。本执行本步骤之前,可先在公式配置文件中创建公式配置表,本实施例对此不作具体限定。通过公式配置表,专业人员只需要对字符串公式进行配置即可,而不用管终端上如何实现对字符串公式进行处理。相应地,程序员只需要负责实现对字符串公式的处理逻辑,而不用管如何编辑公式。
另外,编辑公式的专业人员可在公式配置表中编辑字符串公式,或者为已经辑的字符串公式配置相关参数,本实施例对此也不作具体限定。
由上述内容可知,公式配置表中通常会存在多个字符串公式,从而如何在公式配置表中定位字符串公式,或者如何在程序代码中添加字符串公式是个关键问题。为了解决上述问题,在本实施例中可为公式配置表中每一条字符串公式分配一个唯一的公式标识,从而可通过公式标识快速定位公式配置表中的字符串公式,或者在程序代码中直接插入公式标识,而不用键入冗长的公式。因此,提高了处理公式时的效率。
由于待处理的字符串公式可能会带有参数,即字符串公式中带有函数且该函数带有参数,从而在执行本步骤之前,用户(专业人员)还可以对公式配置表中带有参数的字符串公式进行配置。关于对公式配置表中带有参数的字符串公式进行配置的方式,本实施例对此不作具体限定,包括但不限于:获取用户输入的公式标识及参数;在公式配置表中查找公式标识对应的字符串公式;根据参数对查找到的字符串公式进行配置。通过该过程,能够灵活地对公式配置表中字符串公式中的参数进行配置。
例如,三角函数中的正弦计算公式sin(n),对应在公式配置表中为字符串公式“sin(n)”。此时,n为一个角度参数。当待处理的字符串公式为“sin(n)”时,则专业人员需提前根据公式标识在公式配置表中找到“sin(n)”,并指定n的值。
需要说明的是,对于公式配置表中带有函数但函数不带有参数的字符串公式,此时直接获取待处理的字符串公式即可,专业人员不需要对其进行配置。例如,在字符串公式“3+4*math.max(5,3)”中。函数max带有5、3这两个参数,但这两个参数是已知的,相当于不带有参数的字符串公式。
其中,202、对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合。
对于处理公式的终端来说,并不能直接识别字符串公式对应的公式含义。因此,可先对字符串公式进行遍历,将字符串公式拆成一个个计算元素,再进行相应的公式计算过程。
在对字符串公式进行拆分时,可按照字符串公式中字符的类型进行拆分。基于上述理论,关于对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合的方式,本实施例对此不作具体限定,包括但不限于:按照字符串公式中字符的顺序,检测字符串公式中每一字符的类型;
对于字符串公式中的任一字符,当检测到任一字符的类型为字母时,对字母的后续字符类型进行检测,直到检测到字符类型不为字母的字符为止,将字母及后续字符类型连续为字母的字符作为函数名,并按照顺序加入到数据结构集合中;
当检测到任一字符的类型为数字时,对数字的后续字符类型进行检测,直到检测到字符类型不为数字的字符为止,将数字及后续字符类型连续为数字的字符作为一个数字,并按照顺序加入到数据结构集合中;
当检测到任一字符的类型为运算符时,将运算符按照顺序加入到数据结构集合中。
其中,数据结构集合可以为数组或者栈,本实施例不对数据结构集合的形式作具体限定。
例如,以数据结构集合为数组,字符串公式为“-10+61*3+max(-5,1)”为例。按照字符串公式中字符的顺序,先检测到的字符为运算符“-”,从而可将数组的第一个元素置为运算符“-”。继续检测,并根据检测结果在数组中添加元素。当检测到数字“6”时,可继续对数字“6”后面的字符进行检测,直到检测到运算符“*”为止,从而可将数字“6”及后续字符类型连续为数字的字符“1”作为一个数字“61”,并将数字“61”添加至数组中。同理,可将函数名“max”作为一个元素添加至数组中。最终数组中的元素可如下所示:[-,10,+,2,*,3,+,max,(,-,5,,,1,)]。其中,每个元素之间的逗号主要是为了对每个元素进行划分,并非数组中的元素。函数max中参数-5与参数1之间的逗号为函数参数分隔符,后续对数组进行整理时需要考虑在内。
其中,203、对数据结构集合中的元素进行整理。
由于专业人员在公式配置表中编辑字符串公式时,可能会出现输入多余括号的可能性,从而需要对数据结构集合中的元素进行整理。另外,即使通过上述步骤201将字符串公式转换为了数据结构集合,终端还是无法识别字符串公式中的负数,从而基于这一点也需要对数据结构集合中的元素进行整理。下面分别基于上述两种情况,对数据结构集合的整理过程进行说明。
(1)对数据结构集合中的括号元素进行整理;
对数据结构集合中的每一元素进行检测,去除数据结构集合中多余的括号元素。具体地,可先检测前括号元素的出现次数与后括号元素的出现次数是否一致。当两者不一致时,检测每一前括号及每一前括号匹配的后括号,删除没有匹配前括号的后括号及没有匹配后括号的前括号。
(2)基于负数识别过程,对数据结构集合中的元素进行整理。
负数可能出现在公式中的不同位置,现基于负数负号的所处位置,分为以下几种情况来对数据结构集合中负数的识别过程进行说明。
第一种情况:对于数据结构集合中的任一负号元素,当任一负号元素为数据结构集合中的第一个元素时,在任一负号元素的前面增加一个数字元素-1,并作为数据结构集合中的第一个元素,同时将任一负号元素修改为乘号元素;
例如,以数据结构集合为数组,字符串公式转换为数组后,该数组为[-,10,+,2,*,3,+,max,(,-,5,,,1,)]为例。由该数组中的内容可知,终端无法识别出数组中第一个元素-10,识别出来的内容为运算符“-”及数字“10”。因此,当负号元素为数据结构集合照中的第一个元素时,可在负号元素前面增加一个元素“-1”,并将负号元素修改为乘号元素“*”。相应地,数组中的元素“-”“10”变为了“-1”“*”“10”,从而将负数变为了-1乘以对应的正数,进而让终端能够识别出负数。
第二种情况:当任一负号元素不为数据结构集合中的第一个元素时,若任一负号元素的前一个元素不为后括号元素且不为数字元素,同时任一负号元素的下一个元素为数字元素,将下一个数字元素乘以-1的运算结果作为任一负号元素新的下一个元素,并从数据结构集合中删除任一负号元素;
例如,以数组为[-10,+,2,*,-,3,+,max,(,-,5,,,1,)]为例。该数组中数字元素“2”与数字元素“3”之间的元素为“*”及“-”。由上述内容可知,负号元素“-”应与数字元素“3”结合在一起。由于负号元素“-”的前一个元素不为后括号元素且不为数字元素,而是为乘号元素“*”,从而可将负号元素“-”的下一个数字元素“3”乘以-1,得到运算结果-3。将数字元素“-3”作为负号元素“-”新的下一个元素,并从数组中删除负号元素“-”。整理后的数组为[-10,+,2,*,-3,+,max,(,-,5,,,1,)]。
第三种情况:当任一负号元素不为数据结构集合中的第一个元素时,若任一负号元素的前一个元素为前括号元素或者逗号元素,在任一负号元素的后面插入一个乘号元素,并作为任一负号元素的下一个元素,同时将任一负号元素修改为数字元素-1。
例如,在数组[-10,+,2,*,-3,+,max,(,-,5,,,1,)]中,max函数里面的参数-5对应负号元素“-”的前一个元素为前括号元素“(”。因此,可在负号元素“-”后面插入一个乘号元素“*”,并将负号元素“-”修改为数字元素“-1”,从而识别出了负数-5。整理后的数组为[-10,+,2,*,-3,+,max,(,-1,*,5,,,1,)]。
在数组[-10,+,2,*,-3,+,max,(,5,,,,-,1,)]中,max函数里面的参数-1对应负号元素“-”的前一个元素为逗号元素“,”。因此,可在负号元素“-”后面插入一个乘号元素“*”,并将负号元素“-”修改为数字元素“-1”,从而识别出了负数-1。整理后的数组为[-10,+,2,*,-3,+,max,(,5,,,,-1,*,1,)]。
其中,204、根据整理后的数据结构集合,计算获得字符串公式对应的计算结果。
本实施例不对根据整理后的数据结构集合,计算获得字符串公式对应的计算结果的方式作具体限定,包括但不限于:对数据结构集合中的每一元素进行递归遍历;基于递归遍历过程,对数据结构集合中的每一元素进行计算处理,得到字符串公式对应的计算结果。
由于在递归遍历过程中可能会遍历到四则运算,也可能会遍历到函数运算,从而针对两种不同的情况,本实施例提供了相应的计算方法,具体过程如下。
对于第一种情况:当遍历到为数字的任一元素时,基于任一元素的后续运算符元素及运算符的优先级,计算任一元素与后续元素之间的运算结果;对任一元素与其它参与运算的后续元素进行合并,将运算结果作为合并得到的运算结果元素,并将运算结果元素置入数据结构集合中继续进行递归遍历,直到得到字符串公式对应的计算结果。
例如,以数组为[-10,+,2,*,-3,+,max,(,-1,*,5,,,1,)]为例。当遍历到数字-10时,由于后续运算符元素“+”后面还有优先级更高的乘法,从而可基于递归的方式,先计算后续乘法的运算结果。将数字元素“2”、乘号元素“*”及数字元素“-3”合并为一个运算结果元素“-6”,并置入数组中。此时,数组为[-10,+,-6,+,max,(,-1,*,5,,,1,)]。再次递归运算,可计算(-10)+(-6),从而将运算结果置入数组中,得到的数组为[-16,+,max,(,-1,*,5,,,1,)]。当数组中后续运算过程均为四则运算时,按照上述递归过程可计算得到字符串公式的最终计算结果。
对于第二种情况:当遍历到为函数名的任一元素时,基于任一元素后续的相关参数元素,计算任一元素对应的函数值;对任一元素与后续的相关参数元素进行合并,将函数值作为合并得到的函数值元素,并将函数值元素置入数据结构集合中继续进行递归遍历,直到得到字符串公式对应的计算结果。
例如,以数组为[-16,+,max,(,-1,*,5,,,1,)]为例。当遍历到函数名max时,可基于后续相关参数元素计算对应的函数值,从而可得到函数值1。将函数名与后续的相关参数元素进行合并,可得到函数值元素(数字元素)“1”。将数字元素“1”置入数组中,可得到数组为[-16,+,1]。此时可按照上述第一种情况进行递归,最终可得到字符串公式对应的计算结果为-15。
需要说明的是,上述两种情况对应的计算方法在处理数据结构集合时,可以同时使用。由于函数的参数可以为多个,从而在程序代码中可以添加处理不同数量参数的方法,并根据参数数量对方法进行拓展,本实施例对此不作具体限定。另外,在执行函数之前,还可以对该函数的合法性进行检查,本实施例对此不作具体限定。例如,检查该函数要求的参数数量与实际提供的参数数量是否一致。当两者一致时,说明该函数合法。当函数合法时,再执行该函数。
本发明实施例提供的方法,通过基于公式配置表,获取待处理的字符串公式。对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合。对数据结构集合中的元素进行整理。根据整理后的数据结构集合,计算获得字符串公式对应的计算结果。由于可基于公式配置表编辑字符串公式且可对字符串公式进行配置,并按照通用的公式处理流程对所有的字符串公式进行处理,从而实现了公式与代码解耦,并相应地减少了工作量,节省了时间与人力。因此,公式处理的效率较高。
另外,由于为每个字符串公式设置了公式标识,从而通过公式标识可快速定位公式配置表中的字符串公式,且在程序代码中可直接插入公式标识而不用键入冗长的公式。因此,进一步地提高了处理公式时的效率。
最后,由于可对字符串公式转换后的数据结构集合进行整理,从而可以在去除掉多余括号的同时,还可以识别出数据结构集合中的负数,以便于后续计算公式结果。因此,在后续计算过程的角度上,也可以提高公式处理的效率。
本发明实施例提供了一种基于字符串的公式处理装置,该装置用于执行上述图1或图2对应实施例所提供的基于字符串的公式处理方法。参见图3,该装置包括:
第一获取模块301,用于基于公式配置表,获取待处理的字符串公式;
遍历模块302,用于对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;
计算模块303,用于根据数据结构集合,计算获得字符串公式对应的计算结果。
作为一种可选实施例,该装置还包括:
第二获取模块,用于获取用户输入的公式标识及参数;
查找模块,用于在公式配置表中查找公式标识对应的字符串公式;
配置模块,用于根据参数对查找到的字符串公式进行配置。
作为一种可选实施例,遍历模块302,用于按照字符串公式中字符的顺序,检测字符串公式中每一字符的类型;
对于字符串公式中的任一字符,当检测到任一字符的类型为字母时,对字母的后续字符类型进行检测,直到检测到字符类型不为字母的字符为止,将字母及后续字符类型连续为字母的字符作为函数名,并按照顺序加入到数据结构集合中;
当检测到任一字符的类型为数字时,对数字的后续字符类型进行检测,直到检测到字符类型不为数字的字符为止,将数字及后续字符类型连续为数字的字符作为一个数字,并按照顺序加入到数据结构集合中;
当检测到任一字符的类型为运算符时,将运算符按照顺序加入到数据结构集合中。
作为一种可选实施例,该装置还包括:
整理模块,用于对数据结构集合中的元素进行整理。
作为一种可选实施例,整理模块,用于对数据结构集合中的每一元素进行检测,去除数据结构集合中多余的括号元素。
作为一种可选实施例,整理模块,用于对数据结构集合中的元素进行整理,包括:
对于数据结构集合中的任一负号元素,当任一负号元素为数据结构集合中的第一个元素时,在任一负号元素的前面增加一个数字元素-1,并作为数据结构集合中的第一个元素,同时将任一负号元素修改为乘号元素;
当任一负号元素不为数据结构集合中的第一个元素时,若任一负号元素的前一个元素不为后括号元素且不为数字元素,同时任一负号元素的下一个元素为数字元素,将下一个数字元素乘以-1的运算结果作为任一负号元素新的下一个元素,并从数据结构集合中删除任一负号元素;
当任一负号元素不为数据结构集合中的第一个元素时,若任一负号元素的前一个元素为前括号元素或者逗号元素,在任一负号元素的后面插入一个乘号元素,并作为任一负号元素的下一个元素,同时将任一负号元素修改为数字元素-1。
作为一种可选实施例,计算模块,包括:
遍历单元,用于对数据结构集合中的每一元素进行递归遍历;
计算单元,用于基于递归遍历过程,对数据结构集合中的每一元素进行计算处理,得到字符串公式对应的计算结果。
作为一种可选实施例,计算单元,用于当遍历到为数字的任一元素时,基于任一元素的后续运算符元素及运算符的优先级,计算任一元素与后续元素之间的运算结果;对任一元素与其它参与运算的后续元素进行合并,将运算结果作为合并得到的运算结果元素,并将运算结果元素置入数据结构集合中继续进行递归遍历,直到得到字符串公式对应的计算结果。
作为一种可选实施例,计算单元,用于当遍历到为函数名的任一元素时,基于任一元素后续的相关参数元素,计算任一元素对应的函数值;
对任一元素与后续的相关参数元素进行合并,将函数值作为合并得到的函数值元素,并将函数值元素置入数据结构集合中继续进行递归遍历,直到得到字符串公式对应的计算结果。
本发明实施例提供的装置,通过基于公式配置表,获取待处理的字符串公式。对字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合。根据整理后的数据结构集合,计算获得字符串公式对应的计算结果。由于可基于公式配置表编辑字符串公式且可对字符串公式进行配置,并按照通用的公式处理流程对所有的字符串公式进行处理,从而实现了公式与代码解耦,并相应地减少了工作量,节省了时间与人力。因此,公式处理的效率较高。
另外,由于为每个字符串公式设置了公式标识,从而通过公式标识可快速定位公式配置表中的字符串公式,且在程序代码中可直接插入公式标识而不用键入冗长的公式。因此,进一步地提高了处理公式时的效率。
最后,由于可对字符串公式转换后的数据结构集合进行整理,从而可以在去除掉多余括号的同时,还可以识别出数据结构集合中的负数,以便于后续计算公式结果。因此,在后续计算过程的角度上,也可以提高公式处理的效率。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于字符串的公式处理方法,其特征在于,所述方法包括:
基于公式配置表,获取待处理的字符串公式;
对所述字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;
根据所述数据结构集合,计算获得所述字符串公式对应的计算结果;
其中,所述对所述字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合,包括:
按照所述字符串公式中字符的顺序,检测所述字符串公式中每一字符的类型;
对于所述字符串公式中的任一字符,当检测到所述任一字符的类型为字母时,对所述字母的后续字符类型进行检测,直到检测到字符类型不为字母的字符为止,将所述字母及后续字符类型连续为字母的字符作为函数名,并按照顺序加入到所述数据结构集合中;
当检测到所述任一字符的类型为数字时,对所述数字的后续字符类型进行检测,直到检测到字符类型不为数字的字符为止,将所述数字及后续字符类型连续为数字的字符作为一个数字,并按照顺序加入到所述数据结构集合中;
当检测到所述任一字符的类型为运算符时,将所述运算符按照顺序加入到所述数据结构集合中。
2.根据权利要求1所述的方法,其特征在于,所述基于公式配置表,获取待处理的字符串公式之前,还包括:
获取用户输入的公式标识及参数;
在所述公式配置表中查找所述公式标识对应的字符串公式;
根据所述参数对查找到的字符串公式进行配置。
3.根据权利要求1所述的方法,其特征在于,所述根据所述数据结构集合,计算获得所述字符串公式对应的计算结果之前,还包括:
对所述数据结构集合中的元素进行整理。
4.根据权利要求3所述的方法,其特征在于,所述对所述数据结构集合中的元素进行整理,包括:
对所述数据结构集合中的每一元素进行检测,去除所述数据结构集合中多余的括号元素。
5.根据权利要求3所述的方法,其特征在于,所述对所述数据结构集合中的元素进行整理,包括:
对于所述数据结构集合中的任一负号元素,当所述任一负号元素为所述数据结构集合中的第一个元素时,在所述任一负号元素的前面增加一个数字元素-1,并作为所述数据结构集合中的第一个元素,同时将所述任一负号元素修改为乘号元素;
当所述任一负号元素不为所述数据结构集合中的第一个元素时,若所述任一负号元素的前一个元素不为后括号元素且不为数字元素,同时所述任一负号元素的下一个元素为数字元素,将下一个数字元素乘以-1的运算结果作为所述任一负号元素新的下一个元素,并从所述数据结构集合中删除所述任一负号元素;
当所述任一负号元素不为所述数据结构集合中的第一个元素时,若所述任一负号元素的前一个元素为前括号元素或者逗号元素,在所述任一负号元素的后面插入一个乘号元素,并作为所述任一负号元素的下一个元素,同时将所述任一负号元素修改为数字元素-1。
6.根据权利要求1所述的方法,其特征在于,所述根据所述数据结构集合,计算获得所述字符串公式对应的计算结果,包括:
对所述数据结构集合中的每一元素进行递归遍历;
基于递归遍历过程,对所述数据结构集合中的每一元素进行计算处理,得到所述字符串公式对应的计算结果。
7.根据权利要求6所述的方法,其特征在于,所述基于递归遍历过程,对所述数据结构集合中的每一元素进行计算处理,得到所述字符串公式对应的计算结果,包括:
当遍历到为数字的任一元素时,基于所述任一元素的后续运算符元素及运算符的优先级,计算所述任一元素与后续元素之间的运算结果;
对所述任一元素与其它参与运算的后续元素进行合并,将所述运算结果作为合并得到的运算结果元素,并将所述运算结果元素置入所述数据结构集合中继续进行递归遍历,直到得到所述字符串公式对应的计算结果。
8.根据权利要求6所述的方法,其特征在于,所述基于递归遍历过程,对所述数据结构集合中的每一元素进行计算处理,得到所述字符串公式对应的计算结果,包括:
当遍历到为函数名的任一元素时,基于所述任一元素后续的相关参数元素,计算所述任一元素对应的函数值;
对所述任一元素与后续的相关参数元素进行合并,将所述函数值作为合并得到的函数值元素,并将所述函数值元素置入所述数据结构集合中继续进行递归遍历,直到得到所述字符串公式对应的计算结果。
9.一种基于字符串的公式处理装置,其特征在于,所述装置包括:
第一获取模块,用于基于公式配置表,获取待处理的字符串公式;
遍历模块,用于对所述字符串公式进行遍历,根据遍历结果生成含有公式的数据结构集合;
计算模块,用于根据所述数据结构集合,计算获得所述字符串公式对应的计算结果;
其中,所述遍历模块具体用于:
按照所述字符串公式中字符的顺序,检测所述字符串公式中每一字符的类型;
对于所述字符串公式中的任一字符,当检测到所述任一字符的类型为字母时,对所述字母的后续字符类型进行检测,直到检测到字符类型不为字母的字符为止,将所述字母及后续字符类型连续为字母的字符作为函数名,并按照顺序加入到所述数据结构集合中;
当检测到所述任一字符的类型为数字时,对所述数字的后续字符类型进行检测,直到检测到字符类型不为数字的字符为止,将所述数字及后续字符类型连续为数字的字符作为一个数字,并按照顺序加入到所述数据结构集合中;
当检测到所述任一字符的类型为运算符时,将所述运算符按照顺序加入到所述数据结构集合中。
CN201611192712.3A 2016-12-21 2016-12-21 基于字符串的公式处理方法及装置 Active CN106874243B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611192712.3A CN106874243B (zh) 2016-12-21 2016-12-21 基于字符串的公式处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611192712.3A CN106874243B (zh) 2016-12-21 2016-12-21 基于字符串的公式处理方法及装置

Publications (2)

Publication Number Publication Date
CN106874243A CN106874243A (zh) 2017-06-20
CN106874243B true CN106874243B (zh) 2020-05-12

Family

ID=59164057

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611192712.3A Active CN106874243B (zh) 2016-12-21 2016-12-21 基于字符串的公式处理方法及装置

Country Status (1)

Country Link
CN (1) CN106874243B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109241167B (zh) * 2018-09-18 2022-03-25 四川爱联科技股份有限公司 基于bs架构的表格数据导入方法
CN113268960B (zh) * 2021-05-26 2024-04-19 北京北大方正电子有限公司 公式处理方法和装置
CN115438653A (zh) * 2022-09-17 2022-12-06 南京捷崎信息科技有限公司 一种遥测数据分析表达式重复计算方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5384700A (en) * 1992-10-29 1995-01-24 International Business Machines Corporation Method and system for storing multiple, modifiable Yomi and Kanji strings in a structured document
JP2003256414A (ja) * 2002-02-27 2003-09-12 Sharp Corp 文字列処理システム
CN1482803A (zh) * 2003-08-01 2004-03-17 清华大学 一种多码率纠错编码方法
CN104408020A (zh) * 2014-10-30 2015-03-11 北京思特奇信息技术股份有限公司 一种公式解析计算系统及方法
CN104408544A (zh) * 2014-10-28 2015-03-11 用友优普信息技术有限公司 公式解析装置和方法
CN105405002A (zh) * 2015-09-24 2016-03-16 国网山东省电力公司 基于sap平台的公式数据配置方法及系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5384700A (en) * 1992-10-29 1995-01-24 International Business Machines Corporation Method and system for storing multiple, modifiable Yomi and Kanji strings in a structured document
JP2003256414A (ja) * 2002-02-27 2003-09-12 Sharp Corp 文字列処理システム
CN1482803A (zh) * 2003-08-01 2004-03-17 清华大学 一种多码率纠错编码方法
CN104408544A (zh) * 2014-10-28 2015-03-11 用友优普信息技术有限公司 公式解析装置和方法
CN104408020A (zh) * 2014-10-30 2015-03-11 北京思特奇信息技术股份有限公司 一种公式解析计算系统及方法
CN105405002A (zh) * 2015-09-24 2016-03-16 国网山东省电力公司 基于sap平台的公式数据配置方法及系统

Also Published As

Publication number Publication date
CN106874243A (zh) 2017-06-20

Similar Documents

Publication Publication Date Title
US20170228309A1 (en) System and method for equivalence class analysis-based automated requirements-based test case generation
CN106874243B (zh) 基于字符串的公式处理方法及装置
Sasaki et al. Finding file clones in FreeBSD ports collection
US8904352B2 (en) Systems and methods for processing source code during debugging operations
CN111435343B (zh) 计算机系统日志模板的自动生成和在线更新方法与系统
CN104408020A (zh) 一种公式解析计算系统及方法
CN110795326A (zh) 一种代码拦截检测方法、存储介质、电子设备及系统
CN111723087A (zh) 数据血缘关系的挖掘方法、装置、存储介质和电子设备
CN112149828B (zh) 基于深度学习框架的算子精度检测方法和装置
CN112698861A (zh) 源代码克隆识别方法及系统
CN104991963B (zh) 文件处理方法和装置
CN115599388A (zh) 一种api接口文档生成方法、存储介质及电子设备
CN110457064B (zh) 网络割接脚本的生成方法及装置
CN113001538B (zh) 一种命令解析方法及系统
CN109685453B (zh) 智能识别工作流有效路径的方法
CN112181912B (zh) 一种文件格式的确定方法、装置、设备及存储介质
CN111985188A (zh) 一种数据转换方法、装置、终端和存储介质
CN111783313A (zh) 一种模型运算控制方法、装置及电子设备
CN112433710A (zh) 一种区块链智能合约生成方法、设备及存储介质
CN110990271A (zh) 代码性能检测方法、装置、设备及存储介质
CN111078671A (zh) 数据表字段的修改方法、装置、设备和介质
JP2019144873A (ja) ブロック線図解析装置
CN111737118B (zh) 一种流水线测试方法、装置、电子设备及存储介质
CN108958739B (zh) 一种二进制反编译中数组数据结构恢复方法及系统
WO2015145538A1 (ja) プログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラム

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant