如何将带有前导零的数字字符串转储为 yaml-cpp 中的有效 yaml 字符串?
Posted
技术标签:
【中文标题】如何将带有前导零的数字字符串转储为 yaml-cpp 中的有效 yaml 字符串?【英文标题】:How to dump a digit string with leading zeros, as a valid yaml string in yaml-cpp? 【发布时间】:2019-02-22 05:28:28 【问题描述】:创建带有前导零的 yaml 字符串不会在 yaml-cpp 中使用引号进行转义。因此,将字符串写入 texfile 不是有效的 yaml-string。leading_zeros: 00005
根据 yaml 1.2 规范为 5(自己尝试:http://www.yamllint.com/)
YAML::Node node;
node["leading_zeros"] = "00005";
std::cout << YAML::Dump(node)<<std::endl;
// output: leading_zeros: 00005
// instead of:leading_zeros: "00005"
如何让 yaml-cpp 转义带有前导零的字符串?那么这不会被其他 yaml 解析器解释为整数吗?
手动转义似乎不是正确答案。
node["leading_zeros"] = "\"00005\"";
更新: 数字值存储在 YAML::Node 中!我很确定这是一个错误。
【问题讨论】:
【参考方案1】:花了一些时间分析代码后,我找到了这个 hacky 解决方案:https://github.com/nikich340/yaml-cpp/commit/468e0832b39c8320faa7c925708b76f6a3b1b840 它将在所有最初是带引号的字符串的标量周围保存双引号(或者您可以将 emitte manip 更改为单引号)。
【讨论】:
【参考方案2】:直接使用YAML::Emitter
:
YAML::Emitter out;
out << YAML::BeginMap;
out << YAML::Key << "leading_zeroes" << YAML::Value;
out << YAML::Value << YAML::DoubleQuoted << "00005";
out << YAML::EndMap;
【讨论】:
这不是一个有用的现实生活解决方案。 yaml-cpp 的 YAML::Node 已经在我们的 SW 中使用。因此,除了数字字符串之外,同一节点中的所有其他值都不应该用引号引起来。我很确定这是 yaml-cpp 中的错误。请在任何可用的验证器中尝试一下:00005 不是 yaml 中的字符串。以上是关于如何将带有前导零的数字字符串转储为 yaml-cpp 中的有效 yaml 字符串?的主要内容,如果未能解决你的问题,请参考以下文章
Excel:如何像数据透视表一样对一系列带有前导零的数字进行排序?