【问题标题】:How to write a tree structure to disk (VBA with no serialisation)如何将树结构写入磁盘(没有序列化的 VBA)
【发布时间】:2011-06-15 02:38:53
【问题描述】:

所以我使用 VBA(不是选择)来做一些相当重要的编程,发现它是一场噩梦。通常我只是使用序列化将类/对象转储到磁盘然后将其读回,但我不能在这里这样做,除非我编写自己的序列化函数,这基本上就是我在这里问如何做的。

我有课

[Node.cls]
Public pictureName As String
Public tagGroup As String

' Collection of Node objects
Public children As New Collection

Public isOverViewScreen As Boolean

' Collections of strings
Public overViewScreenWellNames As New Collection
Public overViewScreenWellType As New Collection
Public overViewScreenOpenPictureName As New Collection

它基本上是树结构中的一个节点,例如一个具有一组子节点的节点,这些子节点构成一棵树。

将此结构转储到平面文件并读入的最佳方法是什么,有什么提示吗?

我在想我可以为我的所有节点添加一个父链接,然后递归地访问树,以便将它们写入 txt 文件,然后以相同的方式读回它,可能不是最有效的,但我有一个不错的四核机器在这里。有没有更简单或更有效的方法来做到这一点?

【问题讨论】:

  • 我知道这是旧的,但只是偶然发现并想给任何未来的访客留下小费。您可以在例如 C# 中创建一个可序列化的类(dll 库)并添加 XML 结构来表示类(基于节点)。然后,您可以在 VBA 中引用该库。创建类的实例并使用属性来设置类、属性、值。在您的 C# 类中公开一个 Serialize() 方法并从 VBA 调用它来序列化该类。然后重新启动 Excel,创建库的新实例并调用 DeSerialize() 方法来检索实例。当我有空时,我会写一个完整的解决方案。
  • 谢谢,这听起来像是一个更好的解决方案。

标签: vba serialization tree deserialization


【解决方案1】:

编写了一个递归访问树并将“节点”转储到平面文本文件的函数,然后我编写了一个函数,该函数通过状态机读取每个节点,该状态机逐行读取节点,重新创建树,采取太长了,但它似乎工作正常。

感谢所有阅读它的人。

【讨论】:

  • 感谢您发布您的解决方案。我假设预购遍历+写出节点对你有用。
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多