Skip to content

Commit 8d126e1

Browse files
committed
Improved SplitField method
1 parent d8ac926 commit 8d126e1

File tree

1 file changed

+44
-49
lines changed

1 file changed

+44
-49
lines changed

src/CSVArrayList.cls

Lines changed: 44 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,58 +1596,53 @@ Public Function SplitField(aIndex As Long, CharToSplitWith As String, _
15961596
Dim FldDiff As Long
15971597

15981598
On Error GoTo ErrHandler_SplitField
1599-
ColUB = UBound(Buffer(0))
1600-
Select Case aIndex
1601-
Case 0 To ColUB
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
1599+
If Not RowSplit Then
1600+
For rCounter = 0 To CurrentIndex
1601+
curRecord() = Buffer(rCounter)
1602+
ColUB = UBound(curRecord)
1603+
If aIndex > 0 And aIndex <= ColUB Then
1604+
cpRecord() = Split(curRecord(aIndex), CharToSplitWith)
1605+
FldDiff = UBound(cpRecord) - LBound(cpRecord)
1606+
ReDim tmpRecord(0 To ColUB + FldDiff)
1607+
For sfldIndex = 0 To aIndex - 1
1608+
tmpRecord(sfldIndex) = curRecord(sfldIndex)
1609+
Next sfldIndex
1610+
For sfldCPindex = LBound(cpRecord) To UBound(cpRecord)
1611+
tmpRecord(sfldIndex) = cpRecord(sfldCPindex)
1612+
sfldIndex = sfldIndex + 1
1613+
Next sfldCPindex
1614+
For sfldIndex = aIndex + FldDiff + 1 To UBound(curRecord) + FldDiff
1615+
tmpRecord(sfldIndex) = curRecord(sfldIndex - FldDiff)
1616+
Next sfldIndex
1617+
Buffer(rCounter) = tmpRecord
16401618
End If
1641-
Case Else
1642-
GoTo OutOfBounds_SplitField
1643-
End Select
1619+
Next rCounter
1620+
Else
1621+
rowDiff = 1
1622+
For rCounter = 0 To CurrentIndex
1623+
rowDiff = rowDiff - 1
1624+
curRecord() = Buffer(rCounter + rowDiff)
1625+
ColUB = UBound(curRecord)
1626+
If aIndex > 0 And aIndex <= ColUB Then
1627+
cpRecord() = Split(curRecord(aIndex), CharToSplitWith)
1628+
lRowIdx = 0
1629+
For sfldIndex = LBound(cpRecord) To UBound(cpRecord)
1630+
lRowIdx = lRowIdx + 1
1631+
rowDiff = rowDiff + 1
1632+
If lRowIdx = 1 Then
1633+
curRecord(aIndex) = cpRecord(sfldIndex)
1634+
Buffer(rCounter + rowDiff - 1) = curRecord
1635+
Else
1636+
ReDim tmpRecord(0 To ColUB)
1637+
tmpRecord(aIndex) = cpRecord(sfldIndex)
1638+
Me.Insert rCounter + rowDiff - 1, tmpRecord
1639+
End If
1640+
Next sfldIndex
1641+
End If
1642+
Next rCounter
1643+
End If
16441644
Set SplitField = Me
16451645
ErrHandler_SplitField:
1646-
Exit Function
1647-
OutOfBounds_SplitField:
1648-
Set SplitField = Nothing
1649-
err.Raise 9
1650-
Resume ErrHandler_SplitField
16511646
End Function
16521647

16531648
Private Function SplitFieldsOrderStr(fieldsString As String) As String()

0 commit comments

Comments
 (0)