我正在尝试从CSV文件中获取我之前尝试过的行,直到现在才出现在新项目中:
我在结构列表中添加每行(文件夹数组()和其他3个变量
问题是当我使用list.add()第一次正常工作但是当从arraycurrentrow()访问文件夹数据时第二行它正在更新列表中的前一项甚至代码没有到达list.add()部分!!!!
注意:这只发生在数组部分,但结构中的其他3个变量没有问题
注意:我为另一个项目使用相同的代码,但结构没有任何数组?那么为什么Folders()数组中的问题
我整天都没有希望!如果您对此问题有任何想法
Public Structure DataBaseStrc
Public Property Folders As String()
Public Property TagName As String
Public Property SAPFL As String
Public Property SAPEqNO As String
End Structure
Shared Function MarafiqsDataBase_CSV()
Dim ioReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(DataBaseInserter.DatabaseCSVPathText.Text)
ioReader.TextFieldType = FileIO.FieldType.Delimited
ioReader.SetDelimiters(",")
Dim tempList As New List(Of DataBaseStrc)
Dim ReadingIndex As Integer
Dim StrcCurrentRow As DataBaseStrc = Nothing
Integer.TryParse(DataBaseInserter.MaxFoldersNoCB.Text, MaxFolderNo)
ReDim StrcCurrentRow.Folders(MaxFolderNo - 1)
While (Not ioReader.EndOfData)
Dim arrCurrentRow As String() = ioReader.ReadFields()
If arrCurrentRow.Length = 12 Then
Dim FolderIndex As Integer = 0
For FolderIndex = 0 To MaxFolderNo - 1
StrcCurrentRow.Folders(FolderIndex) = arrCurrentRow(FolderIndex)
Next
StrcCurrentRow.TagName = arrCurrentRow(FolderIndex)
StrcCurrentRow.SAPFL = arrCurrentRow(FolderIndex + 1)
StrcCurrentRow.SAPEqNO = arrCurrentRow(FolderIndex + 2)
tempList.Add(StrcCurrentRow)
Else
Error handling
End If
End While
PublicDatabaseList = tempList
Return Nothing
End Function
答案 0 :(得分:1)
问题似乎是你只创建了一个String
数组,因此你每次都要覆盖相同的元素。在循环内部,您应该创建一个新数组并填充它:
StrcCurrentRow.Folders = New String(MaxFolderNo - 1) {}
For FolderIndex = 0 To MaxFolderNo - 1
StrcCurrentRow.Folders(FolderIndex) = arrCurrentRow(FolderIndex)
Next
你也可以摆脱循环外的ReDim
。
说了这么多之后,我将这种类型从一个结构改为一个类,只让每次创建自己的数组,或者甚至使用一个集合。
答案 1 :(得分:0)
移动此行:
Dim StrcCurrentRow As DataBaseStrc = Nothing
在while循环中开始。 您不是每次都设置它,因此只有一个对象,并且每次循环都会不断更新它。