java - 如果找到特定字符串,则删除一行
问题描述
我对 IIB 很陌生,目前我想要实现的是从 TXT 中删除一行,如果它包含一个特定的单词,例如下面的USA单词。我将它作为 BLOB 读取,然后将其转换为字符串. 我应该使用 Compute 节点还是 Java 节点来实现这一点?提前致谢。
例如
前
Hello my name
is Malcom and I live
in the USA
后
Hello my name
is Malcom and I live
当前流程 FileInput -> Compute -> JavaCompute -> FileOutput
FileInput :从特定文件夹中读取数据
计算:将一个字符串替换为另一个字符串(掩码)
CREATE PROCEDURE getBLOBMessage() BEGIN
DECLARE fullBLOB CHARACTER;
SET fullBLOB = CAST(OutputRoot.BLOB.BLOB as char CCSID 1208 Encoding 815);
SET OutputLocalEnvironment.msg = fullBLOB;
END;
CREATE PROCEDURE maskMessage(INOUT msg CHARACTER) BEGIN
SET msg = REPLACE (msg, '431.111.55.113', 'XXX.XXX.XX.XXX');
SET msg = REPLACE (msg, '111.115.11.112', 'XXX.XXX.XX.XXX');
SET msg = REPLACE (msg, '111.112.11.112', 'XXX.XXX.XX.XXX');
SET msg = REPLACE (msg, '111.111.111.116', 'XXX.XXX.XXX.XXX');
SET msg = REPLACE (msg, '172.16.18.72', 'XXX.XX.XX.XX');
SET msg = REPLACE (msg, 'b1111111110', 'XXXXXXXXXXX');
SET msg = REPLACE (msg, '11111111101', 'XXXXXXXXXXX');
SET msg = REPLACE (msg, '11111111111', 'XXXXXXXXXXX');
SET msg = REPLACE (msg, 'B1111111111', 'XXXXXXXXXXX');
SET msg = REPLACE (msg, 'Q1111111', 'XXXXXXXX');
SET msg = REPLACE (msg, '11111111111N', 'XXXXXXXXXXXX');
SET OutputRoot.BLOB.BLOB = CAST (msg AS BLOB CCSID 1208 Encoding 815);
END;
JavaCompute:可能是为了删除行?
FileOutput:生成输出txt文件
解决方案
如果您使用文件输入节点的记录检测功能,则可以在 ESQL 中满足您的要求。
文件输入节点:
- 记录和元素:记录检测 = 分隔
- 连接
End of Data
到Finish File
FileOutput 节点
计算节点:
CREATE COMPUTE MODULE Thaqif_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
DECLARE line CHARACTER CAST(OutputRoot.BLOB.BLOB AS CHAR
CCSID InputProperties.CodedCharSetId
ENCODING InputProperties.Encoding);
IF CONTAINS(line, 'USA') THEN
RETURN FALSE;
ELSE
CALL maskMessage(line);
SET OutputRoot.BLOB.BLOB = CAST(line AS BLOB
CCSID InputProperties.CodedCharSetId
ENCODING InputProperties.Encoding);
RETURN TRUE;
END IF;
END;
CREATE PROCEDURE maskMessage(INOUT msg CHARACTER) BEGIN
SET msg = REPLACE (msg, '431.111.55.113', 'XXX.XXX.XX.XXX');
-- Other patterns removed for brevity
SET msg = REPLACE (msg, 'Q1111111', 'XXXXXXXX');
END;
END MODULE;
文件输出节点:
- 记录和元素:记录定义 = 记录是分隔数据
示例输入:
Hello my name
is Malcom and I live
in the USA
where 431.111.55.113 is masked
but Q2222222 is still ok
结果输出:
Hello my name
is Malcom and I live
where XXX.XXX.XX.XXX is masked
but Q2222222 is still ok
推荐阅读
- python - 记录多线程应用程序。[Errno 24] 打开的文件太多
- symfony - 带有 DataTables Omines 捆绑包的错误 Symfony 4
- python - 难以使用合并功能
- java - 从另一个启动一个 springboot 应用程序
- java - 正则表达式如何匹配字符串中不重复的子字符串?
- elixir - 匿名函数意外输出
- bash - 检查状态代码和内容的 wget 响应
- in-app-billing - 如何从 Google Play Billing 获取购买状态?
- android - 无法解析配置“:app:_internal_aapt2_binary”的所有文件
- android - bottomsheetdialog 中页面底部的额外边距