【问题标题】:talend : newline character in middle of csv columntalend : csv 列中间的换行符
【发布时间】:2017-09-20 20:47:01
【问题描述】:

我正在使用 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' 在引号之间,它会导致提取数据的问题。能 请告诉我如何解决这个问题。

【问题讨论】:

  • 您能否就我提出的解决方案向我们提供反馈?

标签: string csv newline quotes talend


【解决方案1】:

事实上,您的文件是嵌入到 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选项”,没有别的。

为了在“notes”字段中仅显示带有“\n”的记录,我将 Header 设置为 3,将 Limit 设置为 1(tFileInputDelimited 之后只有 1 行的原因)。
这是结果:

如您所见,由于“\n”字符,字段“notes”按预期分派了 4 行。

问候,
总频率

【讨论】:

  • 感谢您的回复,对延误表示抱歉。实际上,我想在不将数据保存到 CSV 的情况下进行处理,正如我之前提到的,我正在使用 tSoap 组件获取数据。我有使用 tOutputFileDelimited 保存数据然后使用 tFileInputDelimited 读取的解决方法,在这种情况下,它能够跳过引号之间的 \n。但我需要的是一次性处理所有数据。
  • 您好,您能解释一下您对“一次处理所有数据”的期望吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2012-12-12
  • 2020-05-27
  • 2013-05-07
相关资源
最近更新 更多