@@ -2843,6 +2843,7 @@ ParseCSVstring_NoSignificantData:
28432843 Resume ParseCSVstring_Error_Handler
28442844End Sub
28452845Public Function RearrangeFields (FieldsOrder As String ) As CSVinterface
2846+ On Error GoTo ErrHandler_RearrangeFields
28462847 If P_SUCCESSFUL_IMPORT And Not P_VARYING_LENGTHS Then
28472848 Dim tmpFldOrder() As String
28482849 Dim cpRecord() As Variant
@@ -2865,7 +2866,7 @@ Public Function RearrangeFields(FieldsOrder As String) As CSVinterface
28652866 tmpRecord() = .item(rCounter)
28662867 iRecCnt = 0
28672868 For fCounter = LBound(tmpFldOrder) To UBound(tmpFldOrder)
2868- cpRecord(iRecCnt) = tmpRecord(CDbl(tmpFldOrder( fCounter)) )
2869+ cpRecord(CDbl(tmpFldOrder( iRecCnt))) = tmpRecord(fCounter)
28692870 iRecCnt = iRecCnt + 1
28702871 Next fCounter
28712872 .item(rCounter) = cpRecord
@@ -3403,6 +3404,64 @@ Sort_Error_Handler:
34033404 P_ERROR_DESC = "[Sort] " & Err.Description
34043405 P_ERROR_SOURCE = Err.Source
34053406End Function
3407+ Public Function SortByField (Optional ByVal FromIndex As Long = -1 , _
3408+ Optional ByVal ToIndex As Long = -1 , _
3409+ Optional ByVal SortingKey As Long = 1 , _
3410+ Optional ByVal SortAlgorithm As SortingAlgorithms = SortingAlgorithms.SA_IntroSort) As CSVinterface
3411+
3412+ On Error GoTo SortByField_Error_Handler:
3413+
3414+ If P_SUCCESSFUL_IMPORT Then
3415+ If FromIndex = -1 Then
3416+ FromIndex = 1
3417+ End If
3418+ Dim CurField As CSVArrayList
3419+ Dim CurFieldArray() As Variant
3420+ Dim sfIcounter As Long
3421+
3422+ Set CurField = New CSVArrayList
3423+ CurFieldArray() = P_CSV_DATA(Abs(SortingKey) - 1 )
3424+ If ToIndex = -1 Then
3425+ ToIndex = UBound(CurFieldArray) + 1
3426+ End If
3427+ For sfIcounter = LBound(CurFieldArray) To UBound(CurFieldArray)
3428+ CurField.Add2 CurFieldArray(sfIcounter)
3429+ Next sfIcounter
3430+ CurField.ShrinkBuffer
3431+ CurField.Sort FromIndex, ToIndex, Sgn(SortingKey) * 1 , SortAlgorithm
3432+ RearrangeFields SortRearrangeGetStr(CurFieldArray, CurField)
3433+ Set SortByField = Me
3434+ End If
3435+ Exit Function
3436+ SortByField_Error_Handler:
3437+ P_ERROR_NUMBER = Err.Number
3438+ P_ERROR_DESC = "[SortByField] " & Err.Description
3439+ P_ERROR_SOURCE = Err.Source
3440+ End Function
3441+ Private Function SortRearrangeGetStr (FieldArray() As Variant , SortedFieldList As CSVArrayList ) As String
3442+ Dim srgIcounter As Long
3443+ Dim srgJcounter As Long
3444+ Dim srgTmpBool As Boolean
3445+ Dim tmpData() As Variant
3446+ Dim fldPos As Long
3447+ Dim tmpResult As CSVArrayList
3448+
3449+ tmpData() = SortedFieldList.items
3450+ Set tmpResult = New CSVArrayList
3451+ For srgIcounter = LBound(FieldArray) To UBound(FieldArray)
3452+ srgJcounter = LBound(tmpData)
3453+ fldPos = 0
3454+ Do
3455+ srgTmpBool = (tmpData(srgJcounter)(0 ) = FieldArray(srgIcounter))
3456+ If Not srgTmpBool Then
3457+ fldPos = fldPos + 1
3458+ End If
3459+ srgJcounter = srgJcounter + 1
3460+ Loop While Not srgTmpBool And srgJcounter <= UBound(tmpData)
3461+ tmpResult.Add fldPos
3462+ Next srgIcounter
3463+ SortRearrangeGetStr = Join$(tmpResult.items, "," )
3464+ End Function
34063465Public Function SplitField (aIndex As Long , CharToSplitWith As String ) As CSVinterface
34073466 On Error GoTo ErrHandler_SplitField
34083467 If P_SUCCESSFUL_IMPORT And Not P_VARYING_LENGTHS Then
0 commit comments