正则匹配开发函数在工程量计算中的应用_第1页
正则匹配开发函数在工程量计算中的应用_第2页
正则匹配开发函数在工程量计算中的应用_第3页
正则匹配开发函数在工程量计算中的应用_第4页
正则匹配开发函数在工程量计算中的应用_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、    正则匹配开发函数在工程量计算中的应用    田林钢 郭静摘要:为了利用工程量清单中的工程量计算公式方便快速地得到工程量计算结果,文章在excel中开发函数,采用正则匹配算法处理数据,完成插入函数即可使计算公式表达式转化为计算结果,为类似工程量计算公式的转化提供了可借鉴的经验。关键词:正则表达式;正则匹配;函数开发;excel中图分类号:o174 文献标识码: a 文章编号:0 引言工程量清单是工程投资计算的基础,工程量清单计算底稿更是工程存档的重要资料,如何合理利用工程量清单中的计算公式快速方便地计算出工程量是工程设计人员一直以来关心的课题。文中

2、利用正则匹配算法处理数据,在excel中开发函数,以实现工程量计算公式表达式转化为计算结果的效果。文章中以水利工程为例阐述主流的两类工程量计算公式的转化方法,为各类工程的工程量计算公式转化提供了可借鉴的经验。现阶段工程量清单的状况工程量清单底稿制度是建设工程的一项基本制度,旨在为工程量计算结果提供明确依据。纵观现阶段工程量清单的计算过程,大多数工程设计人员仍然采用手动添加等号抑或从网络上下载他人计算模板的方式来完成计算公式向公式计算结果的转化。然而,前者重复操作次数多、速度慢、效率低,且遇到有文字说明的计算公式就出现错误;后者虽适当避免了前者的缺点,可是模板的模式固定不可调整、适用性差,且用户

3、对模板的后台运行模式全然不知,很容易出现出现了错误而不自知的情况,十分危险。鉴于以上原因,开发一款操作方便、适用性广、运行模式为用户掌握的工程量转化程序是十分必要的。文章采用正则配方法开发函数编写程序,完成公式向其计算结果的转化。正则表达式匹配算法正则表达式英文名为regular expression,是一种描述字符串结构模式的形式化表达方法,通常用于搜索和替换符合某个模式的文本内容1。正则匹配算法即利用正则表达式的匹配模式参数(pattern)实现提取、替换或获取符合目标模式的文本内容的算法。正则表达式的应用十分广泛,通常从杂乱的语句中获取e-mail地址、汇总含非数字字符的数据、删除重复字

4、符等普通搜索替换完成不了的工作,正则表达式都可以顺利完成。在vba中引用正则表达式转化工程量计算公式也是汇总含非数字字符数据应用的一种。设计开发函数2.1开发函数实现工程量计算公式转化为计算结果水利工程量计算公式分为两种,即纯计算公式(计算式一)和带标注性文字的计算公式(计算式二)两种,如下所示:0.24*(0.4-0.06)*2.76*4*4 (计算式一)0.64宽*0.15厚*(1.5-0.24)长*4面*10个同上 (计算式二)对于纯计算公式而言,我们可以利用vba语言在excel中开发一般函数(如eva函数),而对于带有标注性文字的计算公式普通的vba语言却无能为力,可是正则匹配方法却

5、可以解决这个难题。正则表达式英文名为regular expression,是一种描述字符串结构模式的形式化表达方法,通常用于搜索和替换符合某个模式的文本内容7。正则匹配算法即利用正则表达式的匹配模式参数(pattern)实现提取、替换或获取符合目标模式的文本内容的算法。正则表达式的应用十分广泛,通常从杂乱的语句中获取e-mail地址、汇总含非数字字符的数据、删除重复字符等普通搜索替换完成不了的工作,正则表达式都可以顺利完成。在vba中引用正则表达式转化工程量计算公式也是汇总含非数字字符数据应用的一种。2.2 正则计算函数代码设计打开工程量清单,同时按alt+f11键调出visual basic

6、编辑器,单击插入 / 模块命令则新建一个空的全局模块(模块1),双击工程资源管理器中的模块1 ,输入以下代码(代码 code1):function 正则计算(rng as range)application.volatile'设置强制性计算dim str as string '定义str为字符串变量dim regexp as object '定义regexp为对象变量set regexp = createobject("vbscript.regexp")'创建正则表达式引用对象if len(rng) = 0 then'判断rng是否为

7、空正则计算 = ""'若rng为空则赋空值给函数正则表达式else'若rng不为空则对正则对象进行匹配设计with regexp.pattern = ".*?" '设置正则匹配规则.global = true '设置匹配为全局的str = .replace(rng.text, "") '将匹配结果替换为空end with正则计算 = round(application.evaluate(str), 2)end ifend function本段代码(代码code1)中,首先用set语句创建对正则表

8、达式的引用,其次对rng对象进行是否为空的判断,如果不为空则进行正则匹配,匹配公式“.pattern = ".*?"”的含义是匹配中括号及其内的所有字符,如果公式中不含中括号和文字性说明(如计算式一),则跳过匹配,将计算式赋值给str并进行下一步计算;如果含(如计算式二),则将中括号和其内的文字删除(即删除宽、厚 、长 、面和个同上),则剩下的字符就是就是纯计算公式str:0.64*0.15*(1.5-0.24)*4*10。最后用evaluate方法将str转化为计算结果,同时用 round函数将计算结果保留到两位小数。2.3 正则计算函数在水里工程量清单中的应用在单元格d

9、4、d5中分别输入公式一和公式二,选择e4单元格,单击插入函数,在弹出的对话框中“或选择类别(c):”下拉菜单中选择“全部”,然后在“选择函数(n):”列表框中拨动滚动条则可以找到(代码code1)中新建的函数“正则计算”,选择它并单击确定,在弹出的“函数参数”对话框中选择rng参数为单元格d4,单击确定,则e4中即计算出单元格d4中计算公式的结果3.6。在e5内同样填充“正则计算”公式,则计算式二的计算结果4.84也显示在单元格中。由上述操作效果来看,正则计算函数对于纯计算公式的计算和含有文字说明的数据计算都是非常有效的。这里必须强调一下,正则表达式用于在杂乱语句中搜索和替换符合某个模式的文本内容,在上述水利工程量清单示例中即为匹配中括号及其中的字符;如果目标字符串没有任何规则和模式可循,那么正则表达式对其也是无能为力的。3结语正则匹配方法开发函数将工程量计算式转化为计算结果是有效的,它不仅适用于纯计算公式也适用于含有文字说明的计算模式。正则匹配函数的计算效果和应用广泛性都令人满意,为各类工程量计算公式的转化提供了可借鉴的经验。参考文献1 罗刚君.excelvba程序开发自学宝典(第2版).北京:电子工业出版社,2011.8作者简介 田林钢,男,生于1968,河南郑州人,华北水利水电学院教授级高工,研究方向:工程造价管理,水工结构,工程风险管理。城市

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论