10、运用正则表达式高效处理数据格式问题

Plant仿真模型在读入外部数据的过程中,数据格式经常出现不符合Simtalk编码规则的情况,一般需要进行数据格式的规范化处理,使其满足使用要求。

通常从信息系统接入的数据类型大多为字符型,数据格式五花八门,较为常见的问题包括:

(1)数据格式不规范:例如字符串前后端出现空格、大小写错乱等问题,针对这些问题可以采用“常用字符串处理命令”中介绍的常用命令函数来解决。

(2)数据中部分字符不规范:例如从信息系统接入的日期数据一般用“-”进行连接(如:2022-03-15),如果直接进行日期类型转换,Simtalk语法会报错,Plant编码规则要求用“/”连接(如:2022/03/15),那么就需要将原字符串中的“-”替换为“/”,下面介绍两种替换方法:

方法一:采用常用字符串处理命令替换,代码如下:

var strDate:="2022-03-15"                       --日期文本数据
repeat
    var i:=pos("-",strDate)                     --查找"-"所在位置
    strDate:=incl("/",omit(strDate,i,1),i)      --删除"-",并在该位置插入"/"
until pos("-",strDate)=0                        --当全部替换完成,则终止循环

方法二:运用正则表达式替换,代码如下:

var strDate:="2022-03-15"                       --日期文本数据
strDate:=regex_replace(strDate,"[-]","/")       --将文本中所有"-"替换为"/"

以上两种方法均可以达到替换字符串中指定字符的目的。方法一采用常用字符串处理命令,首先查找字符位置,然后进行替换,循环这一过程,直到完成所有替换任务;方法二根据定义的正则表达式内容统一完成替换(详细正则表达式定义方法见帮助文档),显然方法二更加简洁高效。

Plant从12.2版本开始支持正则表达式搜索和替换,该语法在其它编程语言中较为常见,熟练掌握后可以很大程度提高数据格式处理效率。