如何避免在SplitText中将单行拆分为多行?

时间:2017-02-15 05:59:27

标签: csv apache-nifi

我有CSV文件,其中包含以下行。

No,NAme,ID,Description
1,Stack,232,"ABCDEFGHIJKLMNO
 -- Jiuaslkm asdasdasd"

在处理器结构GetFile - > SplitText

下面使用

在SplitText中,我将标题和行拆分计数设为1。

所以我认为它可以分开排列如下..,

 No,NAme,ID,Description
1,Stack,232,"ABCDEFGHIJKLMNO
 -- Jiuaslkm asdasdasd:"

但它实际上将csv拆分为“2”分裂,如下所示。

First SPlit:

No,NAme,ID,Description
1,Stack,232,"ABCDEFGHIJKLMNO

第二次拆分:

No,NAme,ID,Description
    -- Jiuaslkm asdasdasd"

所以我面临数据处理丢失的事情。

GOal:现在我需要将这些数据线作为单行处理。

EDIT 1:

替换Text。,

可以在下面替换\ n,

No,NAme,ID,Description
\n1,Stack,232,"ABCDEFGHIJKLMNO
 \n-- Jiuaslkm asdasdasd"

它无法转换为单个拆分,但只产生与上述相同的结果。

编辑2:

我的ReplaceTextProcessor具有以下值。

Search Value:"(.*?)(\n)(.*?)"

Replacement Value:"$1\\n$3"

Character Set:UTF-8

MaximumBuffer Size:1MB

Replacement Strategy:Regex Replace

Evaluation Mode:Entire Text

如果有任何遗漏,请告诉我。

1 个答案:

答案 0 :(得分:3)

在" row"中显然有某种换行符。你提供了。

No,NAme,ID,Description          (1)
1,Stack,232,"ABCDEFGHIJKLMNO    (2)
 -- Jiuaslkm asdasdasd"         (3)

如果您希望忽略配对"中的换行符,则必须以某种方式将它们转义(即ReplaceText之前使用令牌,然后在之后撤消操作分裂)。尝试使用替换为SplitText的正则表达式"(.*?)(\n)(.*?)"。这将处理你上面的情况。

"$1\\n$3"

变为

No,NAme,ID,Description
1,Stack,232,"ABCDEFGHIJKLMNO
 -- Jiuaslkm asdasdasd"
2,Queue,454,"PQRSTUVWXYZ
 -- Other words here"

然后分裂后

No,NAme,ID,Description
1,Stack,232,"ABCDEFGHIJKLMNO\n -- Jiuaslkm asdasdasd"
2,Queue,454,"PQRSTUVWXYZ\n -- Other words here"

No,NAme,ID,Description
1,Stack,232,"ABCDEFGHIJKLMNO\n -- Jiuaslkm asdasdasd"

如果你需要处理任意数量的No,NAme,ID,Description 2,Queue,454,"PQRSTUVWXYZ\n -- Other words here" ,你需要使用更复杂的东西(我不认为先行可以原生地处理这些,你需要将\n循环到自身或您可能需要ReplaceText)。

<强>更新

最新版本中引入了一个回归错误,打破了这一流程。这是一个已知问题NIFI-3255,Jira捕获ExecuteScript引发的IllegalArgumentException。如果在应用补丁的情况下运行,此流程将完美运行。我提供了templatelog output