talend:csv列中间的换行符

时间:2017-04-24 08:46:38

标签: string csv newline quotes talend

  

我使用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>

  

这里我们可以看到“notes”列中包含'\ n'的数据   在引号之间,它引起了提取数据的问题。能够   请告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

实际上,您的文件是嵌入到XML文件中的CSV文件 因为&#34;注意&#34;字段包含在&#34;之间,解决方案是将文件转换为纯CSV然后,由于适当的&#34; CSV选项&#34;,问题是&#34; \ n&#34;自动消失。

这是工作的样子: enter image description here

tFileInputFullRow读取输入文件,因为它来自单个字段nammed&#34; line&#34;默认情况下。只需将Header设置为4,将Footer设置为3以忽略大部分XML部分(假设文件结构始终相同)。

将结果传递给tMap只是为了删除剩余的XML&#34; return&#34;标记未被上一步删除(因为不在单独的行上)。
这是用于删除此标记的replaceAll的tMap: enter image description here

在tMap之后,使用tFileOutputDelimited将流传递给纯CSV文件。让所有选项都具有默认值。

现在,使用tFileInputDelimited启动第二个子作业以读取CSV文件。 使用3列定义模式&#34;时间戳&#34;,&#34; CallId&#34;和&#34;注意&#34;。将字段分隔符设置为&#34;,&#34;和魔术,点击&#34; CSV选项&#34;,没有其他。

仅显示带有&#34; \ n&#34;的记录in&#34; notes&#34;字段,我将标题设置为3和限制1(tFileInputDelimited之后只有1行的原因)。
结果如下: enter image description here

正如您所看到的,该字段&#34;注意&#34;由于&#34; \ n&#34;按预期在4行发送字符。

此致
TRF