c++ - 在具有链接结构的文本文件中,我如何在 C++ 中快速跟踪这些链接,而无需多次运行该文件?
问题描述
我即将开始一个项目,该项目需要我将 IFC 文件中的特定信息加载到类或结构中。我正在使用 C++,但自从我上次使用它已经有好几年了,所以我有点生疏了。
IFC 文件具有链接结构,其中一行中的元素可能引用另一行,而另一行又链接到另一行。我提供了一个简短的示例,其中初始的“#xxx”是行索引,而该行中的任何其他“#xxx”都是指向不同行的链接。
#170=IFCAXIS2PLACEMENT3D(#168,$,$);
#171=IFCLOCALPLACEMENT(#32,#170);
#172=IFCBUILDINGSTOREY("GlobalId", #41, "Name", "Description", "ObjectType", #171"...);
在这个例子中,我需要搜索“IFCBULDINGSTOREY”,然后沿着链接向后浏览文件,跳转存储我需要的重要信息位。
主要问题是我的测试文件有 273480 行 (18MB),并且链接可以从文件的一端跳转到另一端 - 我可能必须处理比这更大的文件。
在这个文件中,我需要填充大约 500 个对象,因此需要在文件中跳转很多以获取相关信息。
在这样的文件中跳转的性能友好的方法是什么?
解决方案
(披露 - 我帮助实现 .NET IFC)
我会质疑你在做什么,这意味着你不能使用 IFC 模式的许多 现有实现之一。解析 IFC 模型通常是问题的简单部分。如果您想可视化几何图形或从几何图元进行测量,则存在另一层复杂性......例如,只有几十种特定几何类型:https ://standards.buildingsmart.org/IFC/DEV/IFC4_3/ RC2/HTML/链接/ifcadvancedbrep.htm
如果您访问BuildingSmart 的软件实现列表并搜索“开发”,您将获得针对各种技术/语言的良好列表。
如果您确定要自己实现,典型的方法是构建某种字典/地图,根据实体的键来保存实体。天真地,您可以使用 Lexer 运行初始传递,并在内存中构建地图。但由于 IFC 模型可能超过 GB,您可能需要一种更复杂的方法来构建某种持久索引 - 甚至可能将其放入某种带有索引的数据库中(可能是某种文档数据库)。如果您想支持通过多个会话对数据进行“随机访问”,这一点将变得更加重要。
推荐阅读
- node.js - 为什么 expressjs 从下面的代码在浏览器中返回错误“Cannot GET /”?
- angular - Angular - 动态组件
- javascript - 如何在不检索文档的情况下检查文档是否存在:Mongoose
- python - Pandas 识别数据框中存在 False 的列表中的行号
- keystonejs - KeystoneJS 不会将 LESS 文件自动编译为 CSS
- python - 如何根据调用者将堆栈级别分配给警告?
- python - 使用官方 sdk-python 时将 md5 授权为 sha512 更新
- ios - UITableView 分隔符出现在单元格中间
- document - 如何使用java在open office中生成word文档?
- typescript - TypeScript:如何在方法内“更改”方法参数的类型?