【问题标题】:extract data using c++ and store in txt使用 C++ 提取数据并存储在 txt 中
【发布时间】:2021-12-13 08:03:09
【问题描述】:

我有一个具有以下数据格式的文本文件

 <create>
    <way id="-200341" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-106862"/>
      <nd ref="-106343"/>
      <nd ref="-107240"/>
      <nd ref="-107241"/>
      <nd ref="-106863"/>
      <nd ref="-106858"/>
      <nd ref="-106866"/>
      <nd ref="-106263"/>
      <nd ref="-106868"/>
      <nd ref="-106857"/>
      <nd ref="-107242"/>
      <nd ref="-106867"/>
      <nd ref="-106865"/>
      <nd ref="-107243"/>
      <nd ref="-107244"/>
      <nd ref="-106864"/>
      <tag k="shelter" v="yes"/>
      <tag k="highway" v="footway"/>
    </way>
    <way id="-200340" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-106853"/>
      <nd ref="-106852"/>
      <tag k="shelter" v="yes"/>
      <tag k="highway" v="footway"/>
    </way>
    <way id="-200277" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-106228"/>
      <nd ref="8236806130"/>
      <tag k="highway" v="footway"/>
    </way>
    <way id="-200253" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-106766"/>
      <nd ref="-106765"/>
      <nd ref="-106226"/>
      <nd ref="-106769"/>
      <nd ref="-106228"/>
      <nd ref="-106773"/>
      <nd ref="-106230"/>
      <nd ref="-106771"/>
      <nd ref="-106768"/>
      <tag k="highway" v="footway"/>
      <tag k="shelter" v="yes"/>
    </way>
    <way id="-200219" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-107148"/>
      <nd ref="-106747"/>
      <tag k="shelter" v="yes"/>
      <tag k="highway" v="footway"/>
    </way>
    <way id="-200218" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-106766"/>
      <nd ref="-106755"/>
      <tag k="shelter" v="yes"/>
      <tag k="highway" v="footway"/>
    </way>
    <way id="-200066" version="0" timestamp="1970-01-01T00:00:00Z">
      <nd ref="-106755"/>
      <nd ref="-107148"/>
      <nd ref="-106760"/>
      <nd ref="-106764"/>
      <nd ref="-106762"/>
      <nd ref="-107115"/>
      <nd ref="-106197"/>
      <tag k="highway" v="footway"/>
      <tag k="shelter" v="yes"/>
    </way>
    <way id="543558082" version="1" timestamp="2017-11-29T19:30:02Z" uid="0" user="">
      <nd ref="1314909074"/>
      <nd ref="5254615443"/>
      <nd ref="5254615442"/>
      <nd ref="5254615441"/>
      <nd ref="5254615440"/>
      <nd ref="-106516"/>
      <nd ref="5254615439"/>
      <nd ref="5254615438"/>
      <nd ref="5254615437"/>
      <nd ref="5254615436"/>
      <nd ref="5254615435"/>
      <tag k="service" v="driveway"/>
      <tag k="highway" v="service"/>
      <tag k="oneway" v="yes"/>
    </way>

我有一个这样声明的 unordered_map std::unordered_map&lt;int, std::string&gt; uMapID_feats{};

假设我的地图存储了所有这些 ID 号码 ref="XXXXX" 号码,并在其中存储了一个默认字符串,例如“unknownplace”。

我想要做的是将 ID(称为“ref=XXXXXX”)映射到它下面列出的标签。所以标签例如。对于第一个 ID ref=106862,与之相连的标签是200341, shelter, highway, footway, yes

所以在地图中,前 3 对将如下所示:

"106862" , "200341,shelter,highway,footway,yes"  
"106343" , "200341,shelter,highway,footway,yes"
"107240" , "200341,shelter,highway,footway,yes"

有些集合的标签比其他的多,有些只有 2 个标签,因此我希望将它们全部写入一个字符串并存储在这个 unordered_map 中,标签用逗号分隔。

我应该如何解析这些数据并将其正确存储在 unordered_map 中?

感谢任何帮助,谢谢!

【问题讨论】:

  • 为了省去正确解析 XML 的麻烦,请考虑使用库。像pugixml 这样的东西可能就足够了,而且作为一个只有头文件的库,它很容易集成到任何项目中。然后,您就可以专注于如何存储和处理数据,而不会被 XML 语法所困扰。
  • 感谢@paddy,但这种语法与 XML 文件略有不同,因为当我尝试使用 pugixml 时,存在问题,因为这是一个 .osc 文件......你知道任何库吗? .osc 文件?谢谢
  • 您显示的示例文本在我看来似乎可以解析为 XML。语法“略有不同”到底是什么?您是指没有架构或文档标签吗?当您说有“问题”时,究竟是什么问题?如果“OSC”是一种流行格式,那么该格式的完整描述和目的是什么?它的规范在哪里?我很确定您说的不是 Open Sound Control,也不是 Outlook Social Connector。这和 Open Street Map 有关系吗?
  • 这是一个开放的街道地图更改文件,谢谢。
  • 您还没有描述为什么不能将其解析为 XML。我查看了 Open Street Map Wiki 以了解该格式,它看起来并没有什么特别之处。

标签: c++ algorithm parsing unordered-map


【解决方案1】:

使用像plugixml这样的xml解析库,或者你可以自己构建一个。

解析 xml 的库有很多。选择适合您需求的那一款。 这可能会对您有所帮助:What XML parser should I use in C++?

【讨论】:

  • 这是一个osc文件,xml的语法会不会有些不同?
  • @Megan Darcy 我不这么认为。一个轻量级的 xml 解析器可能会解决问题,因为语法是相同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多