2017-02-15 58 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」。它並沒有取代正確 –