Apache nifi 如何在Nifi上更换回车(CR)和非换行(LF)

Apache nifi 如何在Nifi上更换回车(CR)和非换行(LF),apache-nifi,carriage-return,Apache Nifi,Carriage Return,我有一个文本文件要接收,但是,这个文件中的一些文本字段带有CR char。正式的换行符是LF,所以我想我可以替换所有CR并将其规范化为文件 但是我现在要做一个星期,没有好结果 到目前为止,我尝试的是使用带有多种配置的replaceText处理器。一行一行,整个文本,已经尝试了“\r”、“\\r”、“[\r]”,但似乎没有任何效果 您有什么建议或经验可以分享吗?您可以使用ExecuteScript处理器实现同样的效果,在那里您可以以较少的限制实现自定义清理逻辑。请参阅下面的python代码段,以开

我有一个文本文件要接收,但是,这个文件中的一些文本字段带有CR char。正式的换行符是LF,所以我想我可以替换所有CR并将其规范化为文件

但是我现在要做一个星期,没有好结果

到目前为止,我尝试的是使用带有多种配置的replaceText处理器。一行一行,整个文本,已经尝试了“\r”、“\\r”、“[\r]”,但似乎没有任何效果


您有什么建议或经验可以分享吗?

您可以使用
ExecuteScript
处理器实现同样的效果,在那里您可以以较少的限制实现自定义清理逻辑。请参阅下面的python代码段,以开始

from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
from org.apache.nifi.processors.script import ExecuteScript
from org.python.core.util.FileUtil import wrap
from io import StringIO
import re


# Define a subclass of StreamCallback for use in session.write()
class PyStreamCallback(StreamCallback):
    def __init__(self):
        pass

    def process(self, inputStream, outputStream):
        with wrap(inputStream) as f:
            lines = f.readlines()
            outer_new_value_list = []
            is_header_row = True
            for row in lines:
                if is_header_row:
                    is_header_row = False
                    outer_new_value_list.append(row)
                    continue
                char_list = list(row.strip())
                for position, char in enumerate(char_list):
                    // put your custom cleaning logic here
                    if char == '\\' or char == '^' or char == '"'  or char == '~' :
                        replace_char = '\\' + char
                        char_list[position] = replace_char

                new_data_line = ''.join([str(elem) for elem in char_list])
                outer_new_value_list.append(new_data_line + '\r\n')

            with wrap(outputStream, 'w') as filehandle:
                filehandle.writelines("%s" % line for line in outer_new_value_list)


# end class
flowFile = session.get()
if (flowFile != None):
    flowFile = session.write(flowFile, PyStreamCallback())
    session.transfer(flowFile, ExecuteScript.REL_SUCCESS)
# implicit return at the end

经过一周的尝试,我能够用一个简单的replacetext处理器替换文件中的回车符。这是印刷品,如果需要,请您试一试。

你好,维克拉姆辛!谢谢你花时间回答我的问题。我无法测试它,所以我不知道它是否适用于我的情况。但是我能够使用replaceText来解决我的问题,如下所示。