我在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
是否可以在转换过程中用其他内容替换单元格中的所有这些换行符,例如*
?或者我可以以某种方式将计算机设置为忽略单元格中的所有内联字符?
答案 0 :(得分:7)
这是你的问题:
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中解决这个基本缺陷。即使您认为通过使用模糊数据格式解决了为自己创建的所有问题,某些情况下,你没有预料到会出现,你会在闲暇时忏悔。