私は大きい(〜2Gb)yaml
ファイルを持っています。私はyaml-cpp
ライブラリとYAML::Loadfile
関数を使用します。しかし、私はRAM不足の問題があります。yamlファイルを複数のファイルに分割する方法は?
この小さなファイルを有効なyaml
ファイル(おそらくlinuxの機能)になるように、このファイルをいくつかの小さなファイルに分割する最も簡単な方法は何ですか?
私は大きい(〜2Gb)yaml
ファイルを持っています。私はyaml-cpp
ライブラリとYAML::Loadfile
関数を使用します。しかし、私はRAM不足の問題があります。yamlファイルを複数のファイルに分割する方法は?
この小さなファイルを有効なyaml
ファイル(おそらくlinuxの機能)になるように、このファイルをいくつかの小さなファイルに分割する最も簡単な方法は何ですか?
ファイルに複数のドキュメントがあり、その行の先頭に---
に分割することができます。
複数のドキュメントを持たない場合(または複数のドキュメントがあるにもかかわらず大きすぎる場合)、ドキュメントはトップレベルまたはシーケンスのマッピングを持ちます(理論上は、ラインスカラー、それはそうではありません)。
文書のトップレベルがフロースタイル({ }
でマッピング、シーケンスが[ ]
)の場合、レイアウトはどのように依存しますか。しかし、ブロックスタイルであれば、トップレベルマップの個々のキー、またはシーケンスの要素を簡単に見つけることができます。それらはすべて最初の要素と同じインデントを持ちます(ゼロインデントの可能性が最も高い)。
上記の情報に基づいてYAML文書を分割し、各要素を単独で処理します。
このファイルを私のRAMにロードすることさえできません( 'top'はある時点で100%RAMを使用しています)。 –
なぜRAMにロードしたいのですか?最初の数行を 'head'または' grep -e '^ ---' 'で見ると、複数の文書があるかどうかを知ることができます。 – Anthon
私はそのようなyamlファイルを持っています。https://pastebin.com/J0mTqmWh –
前の質問の[私の答え](http://stackoverflow.com/a/42861599/347964)はオプションではありませんか? – flyx
@flyx「HandleNextDocument」の使用例が見つからず、別の方法を見つけることにしました。 –