【发布时间】:2017-04-18 10:50:27
【问题描述】:
我有一个 CSV 文件列表,我每个月都会将这些文件用于 ETL 到数据库中。它在一个文件夹中。我的数据在许多列中也有;。例如,在位置列中存在New York; USA 之类的值,我希望它们出现在单个列中,而不是拆分为许多列。那我该如何指定分隔符呢?
【问题讨论】:
我有一个 CSV 文件列表,我每个月都会将这些文件用于 ETL 到数据库中。它在一个文件夹中。我的数据在许多列中也有;。例如,在位置列中存在New York; USA 之类的值,我希望它们出现在单个列中,而不是拆分为许多列。那我该如何指定分隔符呢?
【问题讨论】:
我认为您不能在字段内容中包含字段分隔符,或者您必须在“”之间包含这些值。例如:
blabla;"New York; USA";blabla
其他解决方案,将字段分隔符更改为更具体(且未使用)的字符。
恐怕没有更好的解决方案了。
问候, 总频率
【讨论】:
正如 TRF 所述,您不能将分隔符作为文件中非分隔文本的一部分。
我的解决方法如下:
1) 使用tFileInputFullRow (https://help.talend.com/display/TalendComponentsReferenceGuide54EN/tFileInputFullRow) 读取文件
2) 使用tReplace 将; 替换为其他字符,
说-,对于问题单元格(在您的情况下,将"New York;USA" 替换为"New York-USA"。您还可以使用tReplace 组件中的正则表达式选项使其成为通用规则。
3) 将该输出保存到另一个文件中
4) 现在使用; 作为分隔符读取新文件
参考资料:
1)tReplace:https://help.talend.com/display/TalendOpenStudioComponentsReferenceGuide521EN/18.16+tReplace
2) 正则表达式:https://docs.oracle.com/javase/tutorial/essential/regex/
【讨论】:
tReplace,但是当我通过 tOutputdelimited 组件导出它时,我看到它没有被删除 ; 符号。有什么我遗漏的吗?
whole word 复选框是否未选中? (在tReplace 组件中)