簡體   English   中英

talend:csv列中間的換行符

[英]talend : newline character in middle of csv column

我正在使用tSoap組件獲取數據,其中以逗號分隔的值的形式獲取XML格式的結果。 其中,列用逗號分隔,行用'\\ n'分隔。

之后,我使用tExtractXMLField組件從響應中提取數據。

但是在數據中,我在字符串中包含“ \\ n”,將其視為新行。 我嘗試使用tReplace組件使用正則表達式刪除引號內的\\ n,但數據太大,導致導致StackOverflowError。

我也嘗試使用tNomalize組件使用CSV選項分隔行,但是問題仍然存在。

你能幫我這個忙嗎? 提前致謝。

我從肥皂請求中得到的響應是:

  <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <ns2:getReportResultCsvResponse xmlns:ns2="http://service.admin.ws.five9.com/"> <return>TIMESTAMP,CALL ID,NOTES "Mon, 17 Apr 2017 10:05:38",4223519, "Mon, 17 Apr 2017 10:05:40",4223520, "Mon, 17 Apr 2017 10:05:41",4223521,"Alexandria.. Monday -- 55 partial Bal -- 224 May 1 Visa" "Mon, 17 Apr 2017 10:05:42",4223522, "Mon, 17 Apr 2017 10:05:43",4223523, "Mon, 17 Apr 2017 10:11:04",4223524, "Mon, 17 Apr 2017 10:05:43",4223524, "Mon, 17 Apr 2017 10:05:45",4223525,</return> </ns2:getReportResultCsvResponse> </env:Body> </env:Envelope> 

在這里我們可以看到“注釋”列中的數據在引號之間包含“ \\ n”,這導致提取數據時出現問題。 您能告訴我如何解決這個問題。

實際上,您的文件是嵌入XML文件中的CSV文件。
由於“ notes”字段位於“之間”,因此一種解決方案是將文件轉換為純CSV,然后借助適當的“ CSV選項”,自動消除“ \\ n”問題。

這是工作的樣子: 在此處輸入圖片說明

默認情況下,tFileInputFullRow讀取輸入文件,因為它位於命名為“ line”的單個字段中。 只需將Header設置為4並將Footer設置為3即可忽略大多數XML部分(假設文件結構始終相同)。

將結果傳遞給tMap只是為了刪除剩余的XML“返回”標記,該標記未被上一步刪除(因為不在單獨的行中)。
這是帶有replaceAll的tMap,用於刪除此標記: 在此處輸入圖片說明

在tMap之后,使用tFileOutputDelimited將流傳遞到純CSV文件。 讓所有選項都帶有默認值。

現在,使用tFileInputDelimited啟動第二個子作業以讀取CSV文件。 用3列“ Timestamp”,“ CallId”和“ Notes”定義模式。 將字段分隔符設置為“,”,然后單擊“ CSV options”,然后單擊“魔術”。

為了僅在“注釋”字段中顯示帶有“ \\ n”的記錄,我將Header設置為3,將Limit設置為1(tFileInputDelimited之后僅1行的原因)。
結果如下: 在此處輸入圖片說明

如您所見,由於“ \\ n”字符,字段“ notes”按預期分4行發送。

問候,
TRF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM