@@ -155,15 +155,15 @@ End Property
155155''' <summary>
156156''' Gets all indexed Items from the current instance.
157157''' </summary>
158- Public Property Get Keys () As String ()
158+ Public Property Get keys () As String ()
159159 Dim tmpResult() As String
160160 Dim iCounter As Long
161161
162162 ReDim tmpResult(0 To IndexedCurrentIndex)
163163 For iCounter = 0 To IndexedCurrentIndex
164164 tmpResult(iCounter) = IndexedBuffer(iCounter).itemKey
165165 Next iCounter
166- Keys = tmpResult
166+ keys = tmpResult
167167End Property
168168
169169''' <summary>
@@ -507,10 +507,10 @@ End Sub
507507''' </summary>
508508''' <param name="Keys">Indexes of the fields used for deduplication.</param>
509509''' <param name="headers">Indicates if the data has a header record.</param>
510- Public Function Dedupe (Keys As String , Optional Headers As Boolean = True ) As CSVArrayList
510+ Public Function Dedupe (keys As String , Optional Headers As Boolean = True ) As CSVArrayList
511511 On Error GoTo ErrHandler_Dedupe
512512 Dim aIndexes() As String
513- aIndexes() = SplitFieldsOrderStr(Keys )
513+ aIndexes() = SplitFieldsOrderStr(keys )
514514 If CheckForDupIndexes(aIndexes) Then
515515 Dim IndexesCollection As Collection
516516 Dim dRecCounter As Long
@@ -532,19 +532,19 @@ Public Function Dedupe(Keys As String, Optional Headers As Boolean = True) As CS
532532ErrHandler_Dedupe:
533533 Set Dedupe = Nothing
534534End Function
535- Private Function DedupeKeysMerge (aIndex As Long , Keys As Variant ) As String
535+ Private Function DedupeKeysMerge (aIndex As Long , keys As Variant ) As String
536536 Dim tmpResult() As Variant
537537 Dim kLB As Long
538538 Dim kUb As Long
539539 Dim keyCounter As Long
540540 Dim tgRecord() As Variant
541541
542- kLB = LBound(Keys )
543- kUb = UBound(Keys )
542+ kLB = LBound(keys )
543+ kUb = UBound(keys )
544544 ReDim tmpResult(kLB To kUb)
545545 tgRecord() = Buffer(aIndex)
546546 For keyCounter = kLB To kUb
547- tmpResult(keyCounter) = tgRecord(CLng(Keys (keyCounter)))
547+ tmpResult(keyCounter) = tgRecord(CLng(keys (keyCounter)))
548548 Next keyCounter
549549 DedupeKeysMerge = Join$(tmpResult, "|" )
550550End Function
@@ -1582,38 +1582,62 @@ Private Function FormatEvalOutput(ByRef EvalOutput As String) As String
15821582 End If
15831583End Function
15841584
1585- Public Function SplitField (aIndex As Long , CharToSplitWith As String ) As CSVArrayList
1585+ Public Function SplitField (aIndex As Long , CharToSplitWith As String , _
1586+ Optional RowSplit As Boolean = False ) As CSVArrayList
15861587 Dim ColUB As Long
1588+ Dim curRecord() As Variant
1589+ Dim cpRecord() As String
1590+ Dim tmpRecord() As Variant
1591+ Dim rCounter As Long
1592+ Dim rowDiff As Long
1593+ Dim sfldIndex As Long
1594+ Dim lRowIdx As Long
1595+ Dim sfldCPindex As Long
1596+ Dim FldDiff As Long
15871597
15881598 On Error GoTo ErrHandler_SplitField
15891599 ColUB = UBound(Buffer(0 ))
15901600 Select Case aIndex
15911601 Case 0 To ColUB
1592- Dim curRecord() As Variant
1593- Dim cpRecord() As String
1594- Dim tmpRecord() As Variant
1595- Dim rCounter As Long
1596- Dim sfldIndex As Long
1597- Dim sfldCPindex As Long
1598- Dim FldDiff As Long
1599-
1600- For rCounter = 0 To CurrentIndex
1601- curRecord() = Buffer(rCounter)
1602- cpRecord() = Split(curRecord(aIndex), CharToSplitWith)
1603- FldDiff = UBound(cpRecord) - LBound(cpRecord)
1604- ReDim tmpRecord(0 To ColUB + FldDiff)
1605- For sfldIndex = 0 To aIndex - 1
1606- tmpRecord(sfldIndex) = curRecord(sfldIndex)
1607- Next sfldIndex
1608- For sfldCPindex = LBound(cpRecord) To UBound(cpRecord)
1609- tmpRecord(sfldIndex) = cpRecord(sfldCPindex)
1610- sfldIndex = sfldIndex + 1
1611- Next sfldCPindex
1612- For sfldIndex = aIndex + FldDiff + 1 To UBound(curRecord) + FldDiff
1613- tmpRecord(sfldIndex) = curRecord(sfldIndex - FldDiff)
1614- Next sfldIndex
1615- Buffer(rCounter) = tmpRecord
1616- Next rCounter
1602+ If Not RowSplit Then
1603+ For rCounter = 0 To CurrentIndex
1604+ curRecord() = Buffer(rCounter)
1605+ cpRecord() = Split(curRecord(aIndex), CharToSplitWith)
1606+ FldDiff = UBound(cpRecord) - LBound(cpRecord)
1607+ ReDim tmpRecord(0 To ColUB + FldDiff)
1608+ For sfldIndex = 0 To aIndex - 1
1609+ tmpRecord(sfldIndex) = curRecord(sfldIndex)
1610+ Next sfldIndex
1611+ For sfldCPindex = LBound(cpRecord) To UBound(cpRecord)
1612+ tmpRecord(sfldIndex) = cpRecord(sfldCPindex)
1613+ sfldIndex = sfldIndex + 1
1614+ Next sfldCPindex
1615+ For sfldIndex = aIndex + FldDiff + 1 To UBound(curRecord) + FldDiff
1616+ tmpRecord(sfldIndex) = curRecord(sfldIndex - FldDiff)
1617+ Next sfldIndex
1618+ Buffer(rCounter) = tmpRecord
1619+ Next rCounter
1620+ Else
1621+ rowDiff = 1
1622+ For rCounter = 0 To CurrentIndex
1623+ rowDiff = rowDiff - 1
1624+ curRecord() = Buffer(rCounter + rowDiff)
1625+ cpRecord() = Split(curRecord(aIndex), CharToSplitWith)
1626+ lRowIdx = 0
1627+ For sfldIndex = LBound(cpRecord) To UBound(cpRecord)
1628+ lRowIdx = lRowIdx + 1
1629+ rowDiff = rowDiff + 1
1630+ If lRowIdx = 1 Then
1631+ curRecord(aIndex) = cpRecord(sfldIndex)
1632+ Buffer(rCounter + rowDiff - 1 ) = curRecord
1633+ Else
1634+ ReDim tmpRecord(0 To ColUB)
1635+ tmpRecord(aIndex) = cpRecord(sfldIndex)
1636+ Me.Insert rCounter + rowDiff - 1 , tmpRecord
1637+ End If
1638+ Next sfldIndex
1639+ Next rCounter
1640+ End If
16171641 Case Else
16181642 GoTo OutOfBounds_SplitField
16191643 End Select
@@ -1674,7 +1698,7 @@ Private Function SplitFieldsOrderStr(fieldsString As String) As String()
16741698 End With
16751699 End If
16761700 tmpResult.Sort
1677- SplitFieldsOrderStr = tmpResult.Keys
1701+ SplitFieldsOrderStr = tmpResult.keys
16781702 Set tmpResult = Nothing
16791703End Function
16801704Private Function formatColumnPredicate (predicate As String , _
0 commit comments