【问题标题】:Replace or ignore new line character when converting .ods files to .csv files将 .ods 文件转换为 .csv 文件时替换或忽略换行符
【发布时间】:2014-07-04 02:46:36
【问题描述】:

我在 Gnumeric 中使用ssconvert 将一堆ODS 文件转换为CSV 文件,命令如下:

ssconvert -O 'separator=; quoting-mode=never' "f.ods" "f.txt";

效果很好……大多数时候。有时,在某些单元格中,用户在单元格内打了一个换行符(在 Mac 上的 OpenOffice 和 LibreOffice 中,您可以通过按 cmd+enter 来实现此目的)。这会导致随后创建的 CSV 文件获得额外的行,因此而不是

This is some text. Here comes a newline that should be ignored;Some data;Some more data

我明白了

This is some text. Here comes a newline that should be ignored;Some data; Some more data

是否可以在转换过程中将单元格中的所有这些换行符替换为其他内容,例如*

或者我可以以某种方式将计算机设置为忽略单元格中的所有内联字符吗?

【问题讨论】:

    标签: newline export-to-csv carriage-return gnumeric ssconvert


    【解决方案1】:

    这是你的问题:

    ssconvert -O 'separator=;quoting-mode=never'"f.ods" "f.txt";

    通过阻止 ssconvert 在必要时引用,您在这里是自找麻烦,您的问题不仅限于换行符。例如,这个电子表格:

    example.ods

    由您的 ssconvert 命令转换为:

    example.txt

    A1;B1;C1
    A2;XX;B2
    YY;C2
    

    祝你好运。

    而不是尝试在转换后撤消混乱(这将不可能可靠地做到),或者在转换之前以某种方式预处理您的源 ODS 文件(这很疯狂 - 如果您要转换为 CSV 它是大概是因为你想避免弄乱 ODS 文档),你需要使用没有这种根本缺陷的 CSV 方言。

    这意味着您需要引用您的数据。事实证明,ssconvert 不够智能,无法在其默认设置中引用包含分隔符的单元格:

    $ ssconvert -O 'separator=;' example.ods example-2.txt
    $ cat example-2.txt
    A1;B1;C1
    A2;XX;"B2
    YY";C2
    

    ...所以你需要引用所有内容:

    $ ssconvert -O 'separator=; quoting-mode=always' example.ods example-3.txt
    $ cat example-3.txt 
    "A1";"B1";"C1"
    "A2;XX";"B2
    YY";"C2"
    

    对于 CSV,没有可靠的方法;除了正确引用您的数据之外,您提出的任何解决方案都会在某个时候回来并咬您一口,因为未引用的 CSV从根本上破坏了作为一种数据格式。

    重申:不要试图解决未引用的 CSV 中的这个根本缺陷。 即使您认为自己已经解决了通过使用模棱两可的数据格式为自己创建的所有问题,在在某个时候,你没有预料到的情况出现,你会在闲暇时悔改。

    【讨论】:

    • 很好的答案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多