在Groovy中读取\u0001分隔的文件

在Groovy中读取\u0001分隔的文件,groovy,apache-nifi,Groovy,Apache Nifi,在我的NiFi作业中,我通过InvokeScriptedProcessor调用groovy脚本。Groovy脚本应该读取\u0001分隔的文件,并对少数列执行一些转换。下面是我为分割记录的列而编写的代码 def fieldDelimiter = context.getProperty(csvFieldDelimiter).evaluateAttributeExpressions().getValue() while (line = bufferedReader.readLine()) { S

在我的NiFi作业中,我通过InvokeScriptedProcessor调用groovy脚本。Groovy脚本应该读取\u0001分隔的文件,并对少数列执行一些转换。下面是我为分割记录的列而编写的代码

def fieldDelimiter = context.getProperty(csvFieldDelimiter).evaluateAttributeExpressions().getValue()
while (line = bufferedReader.readLine()) {
  String[] cols = line.split(Pattern.quote(fieldDelimiter),-1)
脚本没有拆分记录并将输出与输入相同。但它适用于其他分隔符,如逗号、分号、管道等

以下是InvokeScriptedProcessor中提供的设置

我做错什么了吗?如果我在本地桌面上的Groovy中测试下面的代码,它就可以正常工作

def fieldDelimiter = "\u0001"
def columns = "col1\u0001col2"
String[] cols = columns.split(Pattern.quote(fieldDelimiter),-1)
println "cols output: " + cols[1]
编辑:(流文件内容)


flowfile包含列之间的“SOH”。我已经在上面的问题中添加了屏幕截图作为编辑。我不明白你在说什么。你的意思是说我的代码中有一些问题吗?你如何读取流文件内容?如果我不得不打赌,它与
context.getProperty(csvFieldLimiter).evaluateAttributeExpressions().getValue()
-你能调试吗,如果这确实包含
\u0001
字符,而不是逐字字符串
\\u0001
或其他内容,那么在翻译过程中会丢失它吗?或者您是否尝试过在groovysh中尝试的代码(例如,使用常量
字段分隔符进行调试)?@cfrick-是的,我尝试过以下代码(硬编码分隔符)。它工作得很好
String[]cols=line.split(Pattern.quote('\u0001'),-1)
当我从NiFi处理器获取分隔符作为输入时,我不确定如何解决该问题。