VB字符串表达式计算函数.

ArcGIS字段计算器攻略 ArcGIS字段计算器攻略以及常用的VB函数。 阅读详情

      这是一个VB6.0的字符串表达式计算函数.

 

  1. Private Function EvaluateExpr(ByVal expr As String) As Single
  2.        Const PREC_NONE = 11
  3.        Const PREC_UNARY = 10
  4.        Const PREC_POWER = 9
  5.        Const PREC_TIMES = 8
  6.        Const PREC_DIV = 7
  7.        Const PREC_INT_DIV = 6
  8.        Const PREC_MOD = 5
  9.        Const PREC_PLUS = 4
  10.        Dim is_unary   As Boolean
  11.        Dim next_unary   As Boolean
  12.        Dim parens   As Integer
  13.        Dim pos   As Integer
  14.        Dim expr_len   As Integer
  15.        Dim ch   As String
  16.        Dim lexpr   As String
  17.        Dim rexpr   As String
  18.        Dim value   As String
  19.        Dim status   As Long
  20.        Dim best_pos   As Integer
  21.        Dim best_prec   As Integer
  22.        '  Remove  leading  and  trailing  blanks.
  23.        expr = Trim$(expr)
  24.        expr_len = Len(expr)
  25.        If expr_len = 0 Then Exit Function
  26.        '  If  we  find  +  or  -  now,  it  is  a  unary  operator.
  27.        is_unary = True
  28.        '  So  far  we  have  nothing.
  29.        best_prec = PREC_NONE
  30.        '  Find  the  operator  with  the  lowest  precedence.
  31.        '  Look  for  places  where  there  are  no  open
  32.        '  parentheses.
  33.        For pos = 1 To expr_len
  34.                '  Examine  the  next  character.
  35.                ch = Mid$(expr, pos, 1)
  36.                '  Assume  we  will  not  find  an  operator.  In
  37.                '  that  case  the  next  operator  will  not
  38.                '  be  unary.
  39.                next_unary = False
  40.                If ch = "  " Then
  41.                        '  Just  skip  spaces.
  42.                        next_unary = is_unary
  43.                ElseIf ch = "(" Then
  44.                        '  Increase  the  open  parentheses  count.
  45.                        parens = parens + 1
  46.                        '  An  operator  after  "("  is  unary.
  47.                        next_unary = True
  48.                ElseIf ch = ")" Then
  49.                        '  Decrease  the  open  parentheses  count.
  50.                        parens = parens - 1
  51.                        '  An  operator  after  ")"  is  not  unary.
  52.                        next_unary = False
  53.                        '  If  parens  <  0,  too  many  ')'s.
  54.                        If parens < 0 Then
  55.                                Err.Raise vbObjectError + 1001, _
  56.                                        "EvaluateExpr", _
  57.                                        "Too  many  )s  in  '" & _
  58.                                        expr & "'"
  59.                        End If
  60.                ElseIf parens = 0 Then
  61.                        '  See  if  this  is  an  operator.
  62.                        If ch = "^" Or ch = "*" Or _
  63.                              ch = "/" Or ch = "/" Or _
  64.                              ch = "%" Or ch = "+" Or _
  65.                              ch = "-" _
  66.                        Then
  67.                                '  An  operator  after  an  operator
  68.                                '  is  unary.
  69.                                next_unary = True
  70.                                  
  71.                                Select Case ch
  72.                                        Case "^"
  73.                                                If best_prec >= PREC_POWER Then
  74.                                                        best_prec = PREC_POWER
  75.                                                        best_pos = pos
  76.                                                End If
  77.                                          
  78.                                        Case "*", "/"
  79.                                                If best_prec >= PREC_TIMES Then
  80.                                                        best_prec = PREC_TIMES
  81.                                                        best_pos = pos
  82.                                                End If
  83.                                          
  84.                                        Case "/"
  85.                                                If best_prec >= PREC_INT_DIV Then
  86.                                                        best_prec = PREC_INT_DIV
  87.                                                        best_pos = pos
  88.                                                End If
  89.                                          
  90.                                        Case "%"
  91.                                                If best_prec >= PREC_MOD Then
  92.                                                        best_prec = PREC_MOD
  93.                                                        best_pos = pos
  94.                                                End If
  95.                                          
  96.                                        Case "+", "-"
  97.                                                '  Ignore  unary  operators
  98.                                                '  for  now.
  99.                                                If (Not is_unary) And _
  100.                                                        best_prec >= PREC_PLUS _
  101.                                                Then
  102.                                                        best_prec = PREC_PLUS
  103.                                                        best_pos = pos
  104.                                                End If
  105.                                End Select
  106.                        End If
  107.                End If
  108.                is_unary = next_unary
  109.        Next pos
  110.          
  111.        '  If  the  parentheses  count  is  not  zero,
  112.        '  there's  a  ')'  missing.
  113.        If parens <> 0 Then
  114.                Err.Raise vbObjectError + 1002, _
  115.                        "EvaluateExpr", "Missing  )  in  '" & _
  116.                        expr & "'"
  117.        End If
  118.          
  119.        '  Hopefully  we  have  the  operator.
  120.        If best_prec < PREC_NONE Then
  121.                lexpr = Left$(expr, best_pos - 1)
  122.                rexpr = Right$(expr, expr_len - best_pos)
  123.                Select Case Mid$(expr, best_pos, 1)
  124.                        Case "^"
  125.                                EvaluateExpr = _
  126.                                        EvaluateExpr(lexpr) ^ _
  127.                                        EvaluateExpr(rexpr)
  128.                        Case "*"
  129.                                EvaluateExpr = _
  130.                                        EvaluateExpr(lexpr) * _
  131.                                        EvaluateExpr(rexpr)
  132.                        Case "/"
  133.                                EvaluateExpr = _
  134.                                        EvaluateExpr(lexpr) / _
  135.                                        EvaluateExpr(rexpr)
  136.                        Case "/"
  137.                                EvaluateExpr = _
  138.                                        EvaluateExpr(lexpr) / _
  139.                                        EvaluateExpr(rexpr)
  140.                        Case "%"
  141.                                EvaluateExpr = _
  142.                                        EvaluateExpr(lexpr) Mod _
  143.                                        EvaluateExpr(rexpr)
  144.                        Case "+"
  145.                                EvaluateExpr = _
  146.                                        EvaluateExpr(lexpr) + _
  147.                                        EvaluateExpr(rexpr)
  148.                        Case "-"
  149.                                EvaluateExpr = _
  150.                                        EvaluateExpr(lexpr) - _
  151.                                        EvaluateExpr(rexpr)
  152.                End Select
  153.                Exit Function
  154.        End If
  155.          
  156.        '  If  we  do  not  yet  have  an  operator,  there
  157.        '  are  several  possibilities:
  158.        '
  159.        '  1.  expr  is  (expr2)  for  some  expr2.
  160.        '  2.  expr  is  -expr2  or  +expr2  for  some  expr2.
  161.        '  3.  expr  is  Fun(expr2)  for  a  function  Fun.
  162.        '  4.  expr  is  a  primitive.
  163.        '  5.  It's  a  literal  like  "3.14159".
  164.          
  165.        '  Look  for  (expr2).
  166.        If Left$(expr, 1) = "(" And Right$(expr, 1) = ")" Then
  167.                '  Remove  the  parentheses.
  168.                EvaluateExpr = EvaluateExpr(Mid$(expr, 2, expr_len - 2))
  169.                Exit Function
  170.        End If
  171.                  
  172.        '  Look  for  -expr2.
  173.        If Left$(expr, 1) = "-" Then
  174.                EvaluateExpr = -EvaluateExpr( _
  175.                        Right$(expr, expr_len - 1))
  176.                Exit Function
  177.        End If
  178.          
  179.        '  Look  for  +expr2.
  180.        If Left$(expr, 1) = "+" Then
  181.                EvaluateExpr = EvaluateExpr( _
  182.                        Right$(expr, expr_len - 1))
  183.                Exit Function
  184.        End If
  185.          
  186.        '  Look  for  Fun(expr2).
  187.        If expr_len > 5 And Right$(expr, 1) = ")" Then
  188.                lexpr = LCase$(Left$(expr, 4))
  189.                rexpr = Mid$(expr, 5, expr_len - 5)
  190.                Select Case lexpr
  191.                        Case "sin("
  192.                                EvaluateExpr = Sin(EvaluateExpr(rexpr))
  193.                                Exit Function
  194.                        Case "cos("
  195.                                EvaluateExpr = Cos(EvaluateExpr(rexpr))
  196.                                Exit Function
  197.                        Case "tan("
  198.                                EvaluateExpr = Tan(EvaluateExpr(rexpr))
  199.                                Exit Function
  200.                        Case "sqr("
  201.                                EvaluateExpr = Sqr(EvaluateExpr(rexpr))
  202.                                Exit Function
  203.                End Select
  204.        End If
  205.          
  206.        On Error Resume Next
  207.        EvaluateExpr = CSng(expr)
  208.        status = Err.Number
  209.        On Error GoTo 0
  210.        If status <> 0 Then
  211.                Err.Raise status, _
  212.                        "EvaluateExpr", _
  213.                        "Error  evaluating  '" & expr & _
  214.                        "'  as  a  constant."
  215.        End If
  216. End Function
VB实现基础表达式计算器 字符串是编程中最常见的数据类型之一,它是由零个或多个字符组成的序列,通常用于表示文本信息。在大多数编程语言中,字符串可以用单引号、双引号或特定的字符串界定符来表示。函数是编程中用来封装代码块以便复用的一种结构,它们能够接收输入参数,并有可能返回输出结果。理解函数的定义、参数传递、返回值以及作用域,对于构建一个高效的表达式计算器至关重要。在编程中,函数被定义为一组指令的集合,这组指令可以执行特定的任务。函数的定义通常包含函数名、参数列表、函数体和返回类型。 阅读详情

相关推荐

利用堆栈实现波兰表达式实现后缀表达式计算

C++语言,利用堆栈实现波兰表达式实现后缀表达式计算。

vb6.0/vba中 计算公式字符串转化为可执行的计算公式输出结果

vb6.0/vba中 计算公式字符串转化为可执行的计算公式输出结果 vb6.0中 将计算公式字符串转化为可执行的计算公式输出结果方法如下: Private Sub command1_click() Set My_Script = CreateObject(“scriptcontrol”) My_Script.Language = “VBscript” Run_Str = “msgbox 1+1” My_Script.executestatement Run_Str End Sub 可惜的是scriptcon

u013842103的博客 2827

VB 实现文本中输入公式并计算结果

在文本框中输入公式(如:sin(10),abs((123+456)/(123-456))),自动计算结果 实现简单,一看就懂

VB堆栈的实现

VERSION 5.00 Begin VB.Form Form1 Caption = "Form1" ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = "Fo

laotou99的专栏 3237

基于VB.Net 编写的函数表达式计算器源代码

一款基于VB.NET编写的函数表达式计算器源代码。支持自由输入数学函数表达式运算。例如:可以输入运算式 Y = Int(25 * Sin(Ix)) + (Log(Ix) + Sqrt(65)),而后计算自变量Ix从1到1000的所有运算结果,并支持十六进制输出表示法,可以很直观地看出数学式在区间内的变化规律。

字符串表达式求值

计算字符串表达式的值。 可以计算两种表达式:数值表达式和逻辑表达式 数值表达式中,可包含两个常数(e|pi),14个内部函数(abs|acos|asin|atan|ceiling|cos|exp|floor|log|log10|round|sin|sqrt|tan|min|max) 逻辑表达式采用IIF函数实现,格式如下:IIF(逻辑表达式,表达式1,表达式2)

快速计算字符串表达式的值!

  在很多情况下,我们需要计算一个字符串表达式的值,比如由用户指定函数,然后做出这个函数的曲线,再如,用最速下降法编写求函数最大最小值的程序等等,这些程序由于要具有一定的通用性,函数表达式的一般都是由用户后期指定的 ,并且在代码的处理过程中会经常计算在不同变量值情况下函数的值,因此,我们不可以把函数表达式固化在程序中,只能利用相关的脚本或函数进行计算。       在优快云的VB论坛中,每当

ssihc0的专栏 1254

VB表达式计算器完整实现

主要是注释比较详尽。可以计算任意正则表达式。(包含所有计算函数,并非用脚本组件msscript.ocx实现)支持运算符+,-,*,/,\(整除),%(求余),^(乘方)和任意正确括号的嵌套。如输入"1+(2*3+4^5)/6-7"即可得到结果165.666666666667。希望对你有所帮助。

VB利用堆栈实现表达式计算

VB利用堆栈实现表达式计算     前几天对上学期老师的课件进行了深入学习后,我觉得有必要写个程序实践下,验证表达式计算设计十分正确。于是诞生了如下的程序。     需要说明一点,这里的代码都是自主设计的,未参考网上的任何代码,所以,此代码拥有完全自主知识产权。     版权所有,转载请注明出处:SunSoft Form1.frm文件内容: VERSION 5.00 Beg

greatbody的专栏 1772

VB字符串转换成函数表达式实例源码.rar

VB 字符串转 换成函 数表达 式实例 源码 sim cos "sqr(19-tan(98)*tan(91)-sin(122)*(5*5-(199-12)))"等

关于HC32F460 输出可调占空比PWM波遇到的问题记录

文章目录问题记录一、问题分析二、解决方法总结 问题记录 芯片:HC32F460系列 功能:PWM电机调速 最近产品开发,需要用到HC32的PWM输出来控制电机的转速。参考官方的例程很快就完成了相关的功能,但是,后面在测试,重复开关电机的时候,发现电机的转速时大时小。 一、问题分析 一开始,怀疑是相关寄存器的设置出错导致的问题。因此在设置PWM输出时加上LOG打印,上机测试并没有发现问题。 用示波器抓取波形,这是正常状态下的波形(上电默认配置成5kHz,70%占空比输出) 这是转速较小时的波形输出 .

Top0_0lll的博客 6165

表达式编译计算器(上) (转)

表达式编译计算器(上) (转)[@more@]表达式编译计算器(上) Ken J .NET/">vb 加油站 概述 由于某种原因, 近日编写了一个使用编译原理实现的表达式计算器。 使用该程序可以不但可以计算普通的...

csd3176的博客 172

机器学习之支持向量机SVM及代码示例

一、线性可分SVMSVM算法最初是用来处理二分类问题的,是一种有监督学习的分类算法。对于线性可分的二分类问题,我们可以找到无穷多个超平面,将两类样本进行区分。(超平面:一维中是一个点;二维中是一条线;三维中是一个面……)在上面的多个超平面中,它们都可以成功将样本集划分两边,但哪一个超平面更好?一般来说,当样本点离超平面越近,样本的标签为某类型的概率应该为0.5左右,确信度比较低,而样本点离超平面越远

cxmscb的博客 5万+

动态计算字串表达式值的类

最近用到了这个功能,要计算一些字符串表达式,如"1 + 3 / 2"等等,就写了这个类。原理很简单,就是用CodeDom动态生成一个包含自定义函数的程序集,再通过反射调用。网上例子极多。我这个类是拿来就可以用的,只需要Copy一下代码就可以直接用,不用读代码。支持常用数学函数,如Sin,Log等,而且不区分大小写。<!--Code highlighting produced by Acti

wang_solaris的专栏 922

Vue3 与 Bpmn-js:打造现代化 BPMN 流程设计器

随着业务流程的复杂化,流程设计器成为企业级应用中不可或缺的一部分。BPMN(Business Process Model and Notation)是一种标准的业务流程建模语言,广泛应用于业务流程管理。本文将介绍如何使用 Vue3 和 Bpmn-js 打造一个现代化的 BPMN 流程设计器。

九天的专栏 2117

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码) 文章目录扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)理论讲解KF和EKF模型对比雅可比矩阵计算计算实例应用实例线性模型CV模型:CA模型非线性模型CTRV模型:CTRV实例(python)small demo抛物线demo飞机高度demoC++实例参考文献 我们上篇提到的卡尔曼滤波是用于线性系统,预测(运动)模型和观测模型是在假设高斯和线性情况下进行的。简单的卡尔曼滤波必须应用在符合高斯分布

O_MMMM_O的博客 10万+

表达式编译计算器(上)

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 520

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

计算字符串长度(关于日文字符) 正则表达式

项目要求: 计算一个字符串的长度(对日项目VB.NET) 以前的代码找不到了只能自己写一下了(找到了别人的代码觉得有点麻烦,没用) String.prototype.isBytes = function() {  'var cArr = this.match(/[^\x00-\xff|\uff61-\uff9f]/ig); 'return (cArr==null ? true :

ldp365的专栏 2686

手把手教你理解特斯拉Model 3的域控制器架构:RBCM如何成为“多面手”?

本文深入解析特斯拉Model 3的域控制器架构,重点介绍右车身域控制器(RBCM)如何整合车身电子系统功能。RBCM作为多任务处理中枢,管理空调系统、尾部电气设备和超声波雷达等关键功能,展现了特斯拉在汽车电子架构上的创新设计。文章详细探讨了RBCM的硬件架构、功能版图及信号网络,揭示其如何通过高性能MCU和智能开关技术实现功能集中与效率提升。

weixin_30919429的博客 384

网红商品数据抓取:基于Python的高效爬虫实战

本篇博客介绍了从爬取到存储、分析和可视化网红商品数据的完整流程。通过Python的强大生态,我们能够轻松完成复杂的数据抓取任务。在实际应用中,还可以将此爬虫与机器学习模型结合,进一步挖掘数据价值。

2201_76125261的博客 1476

计算机二级vb笔试题,全国计算机二级VB笔试试题总结

全国计算机二级VB笔试试题总结2002年4月二级VB笔试试题一、选择题1~35题每题2分,共70分。下列各题A)、B)、C)、D)四个选项中,只有一个选择是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。1.下列不能打开属性窗口的操作是( )。A)执行“视图”菜单中的“属性窗口”命令B)按F4键C)按Ctrl+TD)单击工具栏上的“属性窗口”按钮。2.下列可以打开立即窗口的操作是( ...

weixin_39656206的博客 181

196、NPU的编译器开发:教程与示例代码编写

NPU编译器开发实战指南 摘要:本文分享了NPU编译器开发中的核心挑战与实战经验,通过具体代码示例展示了关键实现技术: 指令生成:必须考虑硬件特性(如地址对齐)和芯片配置抽象化 图优化:重点处理常见冗余结构(Reshape合并、BN融合),并注意数值稳定性 算子拆分:采用分块计算策略适配有限SRAM,需特别注意边界条件处理 内存分配:基于张量使用频率的贪心算法优化SRAM使用效率 文中包含多个真实踩坑案例: DMA地址未对齐导致硬件错误 BN融合时的除零风险 tile边界处理不当引起的精度下降 这些经验为开

m0_50546716的博客 89

计算机基础vb,计算机基础(VB)B卷.doc

计算机基础(VB)B卷课程名称 计算机基础(VB) 专业班级题号一二三四五六七八九十总分题分 备注: 学生不得在试题纸上答题(含填空题、选择题等客观题)一、选择题 (20题,2分/题,共40分)(1) 下列不能打开属性窗口的操作是( ) 。A)执行“视图”菜单中的“属性窗口”命令 B)按F4键 C) 按Ctrl+T D) 单击工具栏上的“属性...

weixin_34486987的博客 163

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机二级vb2003年4月考试题,2003年4月全国计算机等级考试二级vb笔试真题附答案...

2003年4月全国计算机等级考试二级vb笔试真题附答案 (19页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!15.9 积分2003年4月全国计算机等级考试二级VB语言笔试试题及答案  一、选择题((1)一(20)每小题2分,(21)一(30)每小题3分,共30题,70分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选...

weixin_35792236的博客 147

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机二级vb考试查分,计算机二级vb考试分值

计算机二级vb考试中的题目分值分别是多少呢?下面是学习啦小编给大家整理的计算机二级vb考试分值及考试考点,供大家参阅!计算机二级vb考试分值VB考试题型分为两部分,选择题40个(40分),上机操作题3个(60分)。选择题中,公共基础知识10个(10分);VB基础知识及应用30个(30分),其中侧重基础理论的大约10个题,侧重应用的大约20题。上机题包括基本操作题(包含2小题)、简单应用题(包含两小...

weixin_30155853的博客 727

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: VB取各颜色分量,将RGB转为HTML颜色.
下一篇: VB 汉字拼音及声调
华芸智森
博客等级 码龄25年 571粉丝 25原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值