2011-06-15 4 views
3

그래서 저는 VBA를 사용합니다. (선택이 아닌) 꽤 사소한 프로그래밍을하고 그것을 악몽으로 생각합니다. 일반적으로 클래스/개체를 디스크에 덤프하고 직렬로 다시 읽어 들이기 위해 직렬화를 사용합니다. 그러나 여기에서 할 수는 없습니다. 기본적으로 내가하는 방법을 묻는 자체 직렬화 함수를 작성하지 않으면 않습니다.디스크에 트리 구조를 쓰는 법 (직렬화가없는 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 파일에 기록한 다음 동일한 방식으로 다시 읽는 것이 가장 효율적이라고 생각했지만 실제로는 그렇지 않습니다. 여기 멋진 쿼드 코어 머신. 이 작업을 수행하는 더 간단하거나 효율적인 방법이 있습니까?

+0

나는 이것이 오래되었다는 것을 압니다 만, 미래의 방문자를위한 팁을 남기고 싶었습니다. 예를 들어 C#에서 Serializable 클래스 (dll 라이브러리)를 만들고 클래스 (* 노드 기반 *)를 나타내는 XML 구조를 추가 할 수 있습니다. 그런 다음 VBA에서 라이브러리를 참조 할 수 있습니다. 클래스의 인스턴스를 만들고 속성을 사용하여 클래스, 속성, 값을 설정합니다. C# 클래스에서 Serialize() 메서드를 노출하고 VBA에서 호출하여 클래스를 serialize합니다. 그런 다음 Excel을 다시 시작하고 라이브러리의 새 인스턴스를 만들고 DeSerialize() 메서드를 호출하여 인스턴스를 검색합니다. Im 자유로운 ill 완전한 해결책을 쓸 때. –

+0

훨씬 더 나은 솔루션이라고 생각합니다. – rolls

답변

2

반복적으로 트리를 방문하여 '노드'를 플랫 텍스트 파일로 덤프하는 함수를 작성한 후 트리를 다시 작성하여 노드 행을 읽는 상태 시스템을 통해 각 노드를 다시 읽는 함수를 작성했습니다. 너무 오래 걸렸지 만 잘 작동하는 것 같습니다.

어쨌든 누구나 읽어 주셔서 감사합니다.

+0

솔루션을 게시 주셔서 감사합니다. 나는 선주문 traversal + 노드를 쓰는 것이 당신을 위해 트릭을했다고 가정합니다. – user183037

관련 문제