Groovy脚本报错:Unexpected input: '('OBX.1') ? def' 咨询解决
Groovy脚本语法错误排查与需求实现
原脚本
Conclusion=+def result = []; msg.get('OBX.1') ? def con =''; for(int i=1; i<=msg.count('OBX'); ++i) { con + ((msg.get('OBX.3', i)+ (msg.get('OBX.5', i) ) + ','}; msg.get('NTE.1') ? for(int i=1; i<=msg.count('NTE'); ++i) { con + ((msg.get('NTE.3', i)+ ','}; return con.replaceAll('[\x00-\x08\x0B\x0C\x0E-\x1F]', ' ')
报错信息
Unexpected input: '('OBX.1') ? def' @ line 1, column 37.
需求说明
判断msg.get('OBX.1')是否存在,仅当它存在时才创建字符串con并执行后续for循环拼接内容;若不存在,保持结果为空。
错误分析
- 三元运算符误用:Groovy的三元运算符
条件 ? 表达式 : 表达式要求?后必须是单个表达式,不能直接写变量定义和代码块。要执行多段条件代码,应该用if语句而非三元运算符。 - 字符串拼接未赋值:
con + (...)仅计算拼接结果但未赋值给con,必须改成con += (...)才能让con累积内容。 - 括号不匹配:多处存在多余的左括号,比如
((msg.get('OBX.3', i)+ (msg.get('OBX.5', i) ) + ','}里的嵌套括号混乱,导致语法结构错误。 - 无效前缀代码:开头的
Conclusion=+def result = [];属于无效语法,且需求中未用到result变量,可直接移除。
修正后的脚本
def con = '' // 检查OBX.1是否存在,存在则处理OBX段 if (msg.get('OBX.1')) { for (int i = 1; i <= msg.count('OBX'); ++i) { // 拼接OBX.3和OBX.5,末尾加逗号 con += "${msg.get('OBX.3', i)}${msg.get('OBX.5', i)}," } // 检查NTE.1是否存在,存在则处理NTE段 if (msg.get('NTE.1')) { for (int i = 1; i <= msg.count('NTE'); ++i) { // 拼接NTE.3,末尾加逗号 con += "${msg.get('NTE.3', i)}," } } // 移除控制字符,同时去掉末尾多余的逗号后返回 return con.replaceAll('[\x00-\x08\x0B\x0C\x0E-\x1F]', '').replaceAll(/,$/, '') } else { // OBX.1不存在时返回空字符串 return '' }
内容的提问来源于stack exchange,提问作者Geogre
相关产品推荐
相关产品推荐

