3

私はssconvertGnumericで使用して、コマンドで一連の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

変換プロセスで、セル内のこれらすべての改行文字を別のものに置き換えることは可能*ですか?

または、セル内のすべてのインライン文字を無視するようにコンピューターを設定できますか?

4

1 に答える 1

7

問題は次のとおりです。

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

ssconvert が必要に応じて引用できないようにすることで、ここで自分自身を撃っていることになり、問題は改行に限定されません。たとえば、このスプレッドシート:

たとえば .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 のこの根本的な欠陥を回避しようとしないでください。あいまいなデータ形式を使用して自分で作成したすべての問題を回避したと思っていても、ある時点で予期していなかった状況が発生、暇なときに悔い改めます。

于 2014-06-27T18:09:16.370 に答える