如何在 Nifi 上替换回车 return (CR) 而不是换行 (LF)

How to replace carriage return (CR) and not line feed (LF) on Nifi

我有一个文本文件要摄取,但是,这个文件的一些文本字段 os 带有 CR 字符。官方换行符是 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 处理器替换文件中的回车符 return。如果需要,这是供您尝试的印刷品。