kettle经验篇:取出一个字符串中的两个数值

项目场景

在一个数据清洗、同步的需求中;有一个要求是判断两个数值是否在正常范围内,并根据判断结果给出异常标记。但这两个数值是以XML的格式存储在Oracle的CLOB字段中,且在同一个XML节点中。该节点的内容如下:

"OD: 17.4 mmHg      OS: 15.1 mmHg"

必须取出其中的17.4,15.1两个值才可以进行判断。这个点还是困扰了我个把个小时,各种百度没有一个理想的结果。 

问题分析 

从XML中取出该节点是很简单的,直接在SQL中就可以取出,代码如下:

(因为涉及到公司业务隐私,表名、字段名都做了匿名化改动,且删除了无关字段)

SELECT 

SUBSTR(NMB1.RPT_CONT,
                    INSTR(NMB1.RPT_CONT,'<findings>')+10,
                          (INSTR(NMB1.RPT_CONT,'</findings>') - INSTR(NMB1.RPT_CONT,'<findings>' ) - 10)) AS FINDINGS
/*CHANGE_FLAG的判断在这里写太复杂难看,放在js组件中去判断*/
FROM NMB1 

无论从上帝视角还是问题未解决前的情况来看的话,写SQL也能解决将两个数值从一个字符串中取出的问题,但那样的SQL太臭太长了。所以将其放到kettle的Java script 组件中去写代码解决。

按照既往的经验,可以用正则表达式很轻松的取出一个字符串中的数字,代码如下:

var price ="价格10000元,不贵";
var num = price.replace(/[^0-9|.]/ig,""); //小数点不排除掉(保留小数点)

但是这次的情况是需要取出 一个字符串中的两个数值,如果还是按照上述正则方法的话,只能得到【17.415.1】这样的数字,做不了判断,没有意义。

咋办勒?

这个时候就需要一句名人名言了:“技术太菜,曲线救国”

  • 把"OD: 17.4 mmHg      OS: 15.1 mmHg"这个字符串拆分成两个字符串;
  • 每个字符串中只包含一个数值
  • 然后再用上文叙述的正则方法取出其中的数值
  • 拿到数值后再进行正常范围判断

那怎么将"OD: 17.4 mmHg      OS: 15.1 mmHg"这种字符串拆成分别包含一个数值的两个字符串呢?

大家还记得我们上面是怎么把xml节点取出来的吗?是混合使用了substr和instr函数;那么在此处我们依然可以用该思路去做。但kettle的Java script组件中是没有instr函数的,与之类似功能的函数是indexOf(),我们就可以利用Java script的内置函数indexOf()和substr()去落实该思路。

代码展现

下面就是上述思路的一个完整代码(Java script组件) 

//Script here

var CHANGE_FLAG = "";
var maxvalue = 21;
var minvalue = 10;
var FINDINGS = FINDINGS;

var index1 = 0;
var str1 = ""; 
var OD = 0
if(FINDINGS != null && FINDINGS.length != 0){

	index1 = indexOf(FINDINGS,"mmHg")

	str1 = substr(FINDINGS,0,index1)

	OD = str1.replace(/[^0-9|.]/ig,"")
}else{

	OD = 0
}


var index2 = 0;
var str2 = ""; 
var OS = 0
if(FINDINGS != null || FINDINGS.length != 0){

	index2 = indexOf(FINDINGS,"OS")

	str2 = substr(FINDINGS,0,index2)

	OS = str2.replace(/[^0-9|.]/ig,"")
}else{

	OS = 0
}


if(OD > maxvalue || OS > maxvalue || OD < minvalue || OS < minvalue){

CHANGE_FLAG = "异常"

}

下面是Java script组件的实际例子,大家可以参考。 

Java script组件

 下图是预览数据片段,已经达到期望要求。 

预览数据片段

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/530179.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024Peak码支付系统网站源码

系统简介 Peak码支付-是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。用全新轻量化的界面UI&#xff0c;让您可以更加方便快捷地解决知识付费和运营赞助的难题。同时&#xff0c;它基于高性能SpeedPHPLayuiPearAdmin架构&#xff0c;提供实时监控和…

https的配置和使用(以腾讯云为例)

1、注册域名 2、获取证书 3、下载证书 下载下来的证书所有格式 4、在服务器上下载nginx并配置 nginx的配置文件 如下 server {listen 80;listen 443 ssl;server_name delegate.letspiu.net.cn;ssl on; #开启ssl#指定证书位置ssl_certificate /etc/ss…

低代码ARM计算机在IIoT中的采集控制生产面板

工业4.0的大潮下工业物联网&#xff08;IIoT&#xff09;已成为推动制造业转型升级的重要动力。其中&#xff0c;低代码ARM嵌入式计算机凭借其出色的性能、灵活的配置以及高度集成化的特点&#xff0c;在工业设备远程监控、维护与诊断方面发挥着关键作用。 一、远程监控与维护 …

【配电网故障定位】基于二进制蝗虫优化算法的配电网故障定位 12节点配电系统故障定位【Matlab代码#75】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 配电网故障定位2. 二进制蝗虫优化算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生故障的时候&am…

ArcGIS Server 10发布要素服务时遇到的数据库注册问题总结(一)

工作环境&#xff1a; Windows 7 64 位旗舰版 ArcGIS Server 10.1 ArcGIS Desktop 10.1 IIS 7.0 开始的时候以为10.1发布要素服务和10.0一样&#xff0c;需要安装ArcSDE&#xff0c;后来查阅资料发现不需要&#xff0c;数据库直连方式就可以了。 首先我来说一下发布要素服…

用Wireshark工具对gRPC接口进行本地抓包

前言&#xff1a; 本人一名敲代码的程序员&#xff0c;突然领导安排研究gRPC接口&#xff0c;并且抓包分析&#xff0c; 抓包工具试了Charles、mitmproxy都不行&#xff0c;浪费很多时间&#xff0c;最后使用Wireshark工具对本地启动的gRPC接口成功抓包&#xff0c;关于安装W…

AI智能客服机器人在医疗健康行业中的应用

随着科技的飞速发展&#xff0c;AI智能客服机器人已经逐渐渗透到我们生活的各个领域&#xff0c;而在医疗健康行业中&#xff0c;它的应用更是为人们带来了很多便利。那么&#xff0c;AI智能客服机器人在医疗健康行业中的应用是怎么样的呢&#xff1f;今天&#xff0c;我们就来…

stack和queue模拟实现

前言 上一期我们介绍了stack和queue的使用&#xff0c;本期我们来模拟实现一下他们&#xff01; 本期内容介绍 容器适配器 deque介绍 为什么stack和queue的底层选择deque为默认容器&#xff1f; stack 模拟现实 queue 模拟实现 什么是容器适配器&#xff1f; 适配器是一种设…

Flutter之TabBar篇

总结了一下项目中用到的几种TabBar&#xff0c;针对不同的样式&#xff0c;有采用系统提供的&#xff0c;也有三方插件提供的&#xff0c;也有自定义的&#xff0c;效果如下&#xff08;后续如果遇到新的样式&#xff0c;会不间断地记录更新&#xff0c;避免重复造轮子…&#…

大创项目推荐 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

Vue第三方组件使用

文章目录 一、组件传值二、elementui组件使用三、fontawesome图标 一、组件传值 1、父组件与孩子组件传值 在孩子组件中定义props属性&#xff0c;里面定义好用于接收父亲数据的变量。 孩子组件是Movie Movie.vue。注意看在Movie组件里面有props对象中的title和rating属性用…

2024 抖音欢笑中国年(三):编辑器技巧与实践

前言 本次春节活动中&#xff0c;我们大部分场景使用内部的 SAR Creator互动方案来实现。 SAR Creator 是一款基于 TypeScript 的高性能、轻量化的互动解决方案&#xff0c;目前支持了Web和字节内部跨端框架平台&#xff0c;服务于字节内部的各种互动业务&#xff0c;包括但不限…

C++string类的实现

string类 string不属于STL,早于STL出现 看文档 C非官网(建议用这个) C官网 文章目录 string类一.为什么学习string类&#xff1f;1.C语言中的字符串2. 两个面试题(暂不做讲解) 二.标准库中的string类1. string类(了解)2. string类的常用接口说明&#xff08;注意下面我只讲解…

echarts 如何设置(dataZoom)多个图形的数据区域一起联动缩放响应

数据区域联动缩放需要用到 dataZoom 的专属事件 dispatchAction 实现多个数据区域联动缩放功能 <div style"width:100%;height:320px;" id"test01"></div> <div style"width:100%;height:320px;" id"test02"></…

JavaScript教程:从基础到发展历程及语法规则的全面介绍

文章目录 一、JavaScript简介二、JavaScript发展历程三、JavaScript基础语法3.1、变量概念3.2、变量命名3.3、变量提升3.4、代码注释3.5、语句3.6、区块 四、总结 一、JavaScript简介 JavaScript 是一种高级的、解释型的编程语言&#xff0c;主要用于为网页添加交互性和动态效…

CSS实现卡片在鼠标悬停时突出效果

在CSS中&#xff0c;实现卡片在鼠标悬停时突出&#xff0c;通常使用:hover伪类选择器。 :hover伪类选择器用于指定当鼠标指针悬停在某个元素上时&#xff0c;该元素的状态变化。通过:hover选择器&#xff0c;你可以定义鼠标悬停在元素上时元素的样式&#xff0c;比如改变颜色、…

绝地求生:三大赛区PGS资格赛冠军已揭晓,2024PCL春季赛临近!

随着工资杯S2落幕&#xff0c;亚太、欧洲、美洲三大赛区的PGS资格赛也已结束&#xff0c;三大赛区冠军队伍分别是CES、TM、FALCONS。欧洲赛区此次竞争非常激烈&#xff0c;冠亚军的分差仅1分&#xff0c;从NAVI转会至TM的xmpl为TM的夺冠起到了非常重要的作用&#xff0c;此地大…

(二)ffmpeg 拉流推流示例

一、搭建流媒体服务器 在这里&#xff0c;选用的流媒体服务器是mediamtx。 下载地址&#xff1a;https://github.com/bluenviron/mediamtx/releases/tag/v1.6.0 系统不同选择的压缩包不同&#xff0c;我用的是ubuntu系统。 下载下来之后进行解压&#xff0c;可以看到里面有三…

抖音评论ID提取工具|视频关键词评论批量采集软件

抖音评论ID提取工具&#xff1a;批量抓取抖音评论 抖音评论ID提取工具是一款功能强大的软件&#xff0c;可以帮助您批量抓取抖音视频下的评论信息。通过输入关键词和评论监控词&#xff0c;即可进行评论的抓取&#xff0c;并提供评论昵称、评论日期、评论内容、命中关键词以及所…

SecureCRT通过私钥连接跳板机,再连接到目标服务器(图文教程)

文章目录 1. 配置第一个session&#xff08;跳板机&#xff09;2. 设置本地端口3. 设置全局firewall4. 配置第二个session&#xff08;目标服务器&#xff09; 服务器那边给了一个私钥&#xff0c;现在需要通过私钥连接跳板机&#xff0c;再连接到目标服务器上 &#x1f349; …