2017-03-27 27 views
1

私は大きい(〜2Gb)yamlファイルを持っています。私はyaml-cppライブラリとYAML::Loadfile関数を使用します。しかし、私はRAM不足の問題があります。yamlファイルを複数のファイルに分割する方法は?

この小さなファイルを有効なyamlファイル(おそらくlinuxの機能)になるように、このファイルをいくつかの小さなファイルに分割する最も簡単な方法は何ですか?

+0

前の質問の[私の答え](http://stackoverflow.com/a/42861599/347964)はオプションではありませんか? – flyx

+0

@flyx「HandleNextDocument」の使用例が見つからず、別の方法を見つけることにしました。 –

答えて

1

ファイルに複数のドキュメントがあり、その行の先頭に---に分割することができます。

複数のドキュメントを持たない場合(または複数のドキュメントがあるにもかかわらず大きすぎる場合)、ドキュメントはトップレベルまたはシーケンスのマッピングを持ちます(理論上は、ラインスカラー、それはそうではありません)。

文書のトップレベルがフロースタイル({ }でマッピング、シーケンスが[ ])の場合、レイアウトはどのように依存しますか。しかし、ブロックスタイルであれば、トップレベルマップの個々のキー、またはシーケンスの要素を簡単に見つけることができます。それらはすべて最初の要素と同じインデントを持ちます(ゼロインデントの可能性が最も高い)。

上記の情報に基づいてYAML文書を分割し、各要素を単独で処理します。

+0

このファイルを私のRAMにロードすることさえできません( 'top'はある時点で100%RAMを使用しています)。 –

+0

なぜRAMにロードしたいのですか?最初の数行を 'head'または' grep -e '^ ---' 'で見ると、複数の文書があるかどうかを知ることができます。 – Anthon

+0

私はそのようなyamlファイルを持っています。https://pastebin.com/J0mTqmWh –

関連する問題