我写了一个程序,从成百上千的csv文件中提取数据,然后将这些数据发布到一个名为ENTRY_ENTRY的List (of Class)中。
在将数据放入其中之后,我需要将数据重新组织到一个层次结构中,指示级别等。我首先确定哪些ENTRY_行是层次结构的顶层。
此信息存储在名为LIST_LIST的列表中。
为此,我迭代了LIST_LIST列表,然后在原始列表ENTRY_ENTRY中挑选出匹配的信息,将值复制到一个新的类实例Entry_F中,操作数据,然后将信息添加到一个名为ENTRY_FINAL的新List (of Class)中。我还跟踪了最后运行的ENTRY_行,然后返回到它。
所有这些编码都运行得很好。
Class中的一个字段跟踪每行在层次结构中的级别。
我编写了代码,这样就不会对ENTRY_ENTRY列表进行修改,但是会有一些东西写回ENTRY_ENTRY。
有没有一种方法可以在设置ENTRY_ENTRY列表后将其锁定?
下面是部分代码。
Public Sub levels()
For Each List_ As LIST_ARRAY In LIST_LIST
If List_.List_TopLevel = True Then ' finds top level parts sheets
'MsgBox(List_.List_FileName & " : Top level : " & List_.List_Ref)
templevel1 = List_.List_Ref
For Each ENTRY_ As ENTRY_ARRAY In ENTRY_ENTRY
If ENTRY_.Entry_List_Ref = templevel1 Then ' Checks for same List Ref
entry_F = ENTRY_
' entry_f.Entry_Level = ENTRY_.Entry_Level 'increases level
Entry_Final.Add(entry_F) 'adds line to final array
If entry_f.Entry_LinkRef <> "" Then
entry_1 = ENTRY_
sublevel2()
End If
End If
Next
End If
Next
End Sub
Sub sublevel2()
'MsgBox("Sublevel2 start " & entry_f.Entry_LIST_FileName & " : " & entry_f.Entry_LinkRef & " : " & entry_f.Entry_Level)
'For Each ENTRY_f As ENTRY_ARRAY In Entry_Final.ToArray
If entry_f.Entry_LinkRef <> "" Then
templevel2 = entry_f.Entry_LinkRef
'MsgBox("templevel assigned")
For Each ENTRY_ As ENTRY_ARRAY In ENTRY_ENTRY.ToArray
If ENTRY_.Entry_List_Ref = templevel2 Then
'MsgBox("found child")
entry_f = ENTRY_
entry_f.Entry_Level = entry_f.Entry_Level + entry_1.Entry_Level 'increases level
Entry_Final.Add(entry_f) 'adds line to final array
' MsgBox("added line")
If entry_f.Entry_LinkRef <> "" Then
entry_2 = ENTRY_
sublevel3()
End If
End If
'MsgBox("Finished " & ENTRY_.Entry_PartNo & " : " & ENTRY_.Entry_LIST_FileName & " : " & templevel2)
Next
ENTRY_ = entry_1
End If
MsgBox("next child")
End SubSublevel3()是Sublevel2()的低级版本
我在哪里将更新后的信息写回ENTRY_ENTRY列表?
发布于 2014-05-28 22:37:44
好吧,你的代码/你的问题很难理解,但我猜问题是这样的:
...pick输出原始列表
ENTRY_ENTRY中的匹配信息,将值复制到新的类实例Entry_F中,操作数据,然后将信息添加到名为ENTRY_FINAL的新List (of Class)中。
看起来你是在谈论代码的这一部分:
For Each ENTRY_ As ENTRY_ARRAY In ENTRY_ENTRY.ToArray
If ENTRY_.Entry_List_Ref = templevel2 Then
entry_f = ENTRY_
entry_f.Entry_Level = entry_f.Entry_Level + entry_1.Entry_Level 'increases level
Entry_Final.Add(entry_f)
...请注意,您不是在这里创建类的新实例:
entry_f = ENTRY_如果您更改了entry_f,就像下面这样:
entry_f.Entry_Level = entry_f.Entry_Level + entry_1.Entry_Level 'increases level 您更改的实例与列表ENTRY_ENTRY中的实例相同,因为entry_f和ENTRY_是对同一对象的引用。
您必须创建一个新对象,并将其添加到Entry_Final中。
https://stackoverflow.com/questions/23914396
复制相似问题