【问题标题】:Read a list of CSV files in Talend with ; in field使用 ; 读取 Talend 中的 CSV 文件列表在现场
【发布时间】:2017-04-18 10:50:27
【问题描述】:

我有一个 CSV 文件列表,我每个月都会将这些文件用于 ETL 到数据库中。它在一个文件夹中。我的数据在许多列中也有;。例如,在位置列中存在New York; USA 之类的值,我希望它们出现在单个列中,而不是拆分为许多列。那我该如何指定分隔符呢?

【问题讨论】:

    标签: csv talend


    【解决方案1】:

    我认为您不能在字段内容中包含字段分隔符,或者您必须在“”之间包含这些值。例如: blabla;"New York; USA";blabla
    其他解决方案,将字段分隔符更改为更具体(且未使用)的字符。

    恐怕没有更好的解决方案了。

    问候, 总频率

    【讨论】:

    • 对于这个问题有什么替代或更好的解决方案?我不想放弃数据。谢谢!
    • 更好的解决方案是发送方不使用与数据相同的分隔符。
    【解决方案2】:

    正如 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 组件中)
    • 我在第 4 项中添加了更多详细信息。看看现在是否有帮助。
    • 是的,未选中。我仍然有这个问题,是不是因为 tFileInputFullRow 组件考虑了行而不是列中的所有内容,尽管定义了架构?作为一个实验,我创建了一个只有一列的文件并尝试这样做并且它有效。但是,当我在定义架构后包含包含许多列的原始文件并清理多个此类列时,它不起作用。
    • 我卡在第 2 步 使用 tReplace 替换 ; 因为它没有替换任何东西。请参考我上面的第二条评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多