次のコードでは、.yamlファイルの解析にparser.GetNextDocument(doc);
を使用して問題が発生しています。大幅なデバッグの後、私はここで(主な)問題は、私のforループが実行されていないことであることがわかりました。doc.size() == 0;
何が間違っていますか?問題YAML-CPPを使用したファイルの解析
void
BookView::load()
{
aBook.clear();
QString fileName =
QFileDialog::getOpenFileName(this, tr("Load Address Book"),
"", tr("Address Book (*.yaml);;All Files (*)"));
if(fileName.isEmpty())
{
return;
}
else
{
try
{
std::ifstream fin(fileName.toStdString().c_str());
YAML::Parser parser(fin);
YAML::Node doc;
std::map< std::string, std::string > entry;
parser.GetNextDocument(doc);
std::cout << doc.size();
for(YAML::Iterator it = doc.begin(); it != doc.end(); it++ )
{
*it >> entry;
aBook.push_back(entry);
}
}
catch(YAML::ParserException &e)
{
std::cout << "YAML Exception caught: "
<< e.what()
<< std::endl;
}
}
updateLayout(Navigating);
}
読まれて.yamlファイルはYAML-CPPを使用して生成されたので、私はそれが正しくYAMLを形成していると仮定しますが、念のために、ここではとにかくファイルです。
^@^@^@\230---
-
address: ******************
comment: None.
email: andrew(dot)levenson(at)gmail(dot)com
name: Andrew Levenson
phone: **********^@
編集:要求することにより、発光コード:あなたが考えたものの線に沿って
void
BookView::save()
{
QString fileName =
QFileDialog::getSaveFileName(this, tr("Save Address Book"), "",
tr("Address Book (*.yaml);;All Files (*)"));
if (fileName.isEmpty())
{
return;
}
else
{
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly))
{
QMessageBox::information(this, tr("Unable to open file"),
file.errorString());
return;
}
std::vector< std::map< std::string, std::string > >::iterator itr;
std::map< std::string, std::string >::iterator mItr;
YAML::Emitter yaml;
yaml << YAML::BeginSeq;
for(itr = aBook.begin(); itr < aBook.end(); itr++)
{
yaml << YAML::BeginMap;
for(mItr = (*itr).begin(); mItr != (*itr).end(); mItr++)
{
yaml << YAML::Key << (*mItr).first << YAML::Value << (*mItr).second;
}
yaml << YAML::EndMap;
}
yaml << YAML::EndSeq;
QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_5);
out << yaml.c_str();
}
}
ファイルを開始する '^ @^@^@ 230'とは何ですか? (そして '^ @'はそれを終わらせますか?) 'yaml-cpp'が本当にそれを放出しているならば、放出コードも投稿できますか? –
私はそれが何であるか分からないので、私は放射コードを設定します。多分Qtバージョンの設定と関係がありますか? – Andy