2017-02-15 59 views
1

我有CSV文件,其中包含以下行。如何避免在SplitText中将单行分割为多行?

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” 分裂像下面,

第一次分裂:

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

第二裂:

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

,所以我必须面对的数据处理错过了一些东西。

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

EDIT 1: 

更换后的文本,

它可能是由下面的替换\ 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 

让我知道是否有遗漏。

回答

3

在您提供的“行”中显然有某种换行符。

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

如果你想里面配对"被忽略换行,你必须以某种方式逃避他们(即SplitText与令牌之前ReplaceText然后拆分后扭转操作)。尝试使用正则表达式"(.*?)(\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自己,或者你可能需要ExecuteScript)。

更新

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

+0

你能检查我编辑过的查询吗?如果我使用替换文本插图中GETFILE和拆分文本导致我面临 –

+0

双引号'“同样的问题'是*正则表达式必要*告诉它只能更换*实际换行符*用'\ N'字符时,它是在一对'''里面检测到。你必须在搜索正则表达式中提供它们才能工作。 – Andy

+0

我已经使用的GetFile,ReplaceText,SplitText.In替换文本搜索值是 “(。*?)(\ n)(。*?)” 和更换vlaue为 “$ 1 \\ N $ 3”。它并没有取代正确 –