Funcion Frag - alternativa a split

Iniciado por ‭‭‭‭jackl007, 26 Abril 2009, 17:33 PM

0 Miembros y 1 Visitante están viendo este tema.

‭‭‭‭jackl007

Hola!
Hace tiempo tube la necesidad de crear una funcion(cuando aprendia pseudocodigo) para trabajar con datos de registros que sigen un formato, asi que asi nacio esta funcion Frag, por lo cual en ese momento no conocia a split, pero tenia la necesidad de algo como eso...
Ahora acabo de encontrar el documento donde guarde detalles de la funcion el cual habia hecho para compartir con compañeros de estudio, y ahora lo posteo por si le sea util a alguien mas...
La funcion split sirve para lo mismo, pero a veces no es necesario crear un array para acceder a un dado en una posicion en concreto; y mas aun, si es que tienes un documento con muchos registros, entonces es necesario de Frag, que apunta hacia algo en concreto...
A mi me es util en programas que usan sockets para enviar y recibir datos, guardar configuraciones del programa, para registros de usuarios, para archivos de configs, en fin...

usos:


aqui dejo el enlace del documento con su respectiva pequeña ayuda:http://www.tienspiura.com/jackl007/FuncionFrag_vb.pdf

el codigo de la funcion es este:
Código (vb) [Seleccionar]

Public Function Frag(ByVal Cad As String, dLim As String, X As Integer) As String
Dim i, a As Integer
Dim Encontrado As Boolean
For a = 1 To X
i = InStr(1, Cad, dLim)
    If i = 0 Then
        If Encontrado = False Then
            Frag = Cad
            Encontrado = True
        Else
            Frag = "NotFound"
        End If
    Else
        Frag = Mid(Cad, 1, i - 1)
        Cad = Mid(Cad, i + Len(dLim))
    End If
Next a
End Function

Hay veces que no es necesario usar frag para cosas simples donde con split lo logras, pero si necesitas datos mas trabajados y rapido, frag te simplifica bastante...

cobein

No hay necesidad de usar un array, con split podes simplemente hacer asi

sMyVar = Split(MyText,MyDelim)(Index)


Aca dejo otra mas, funciona practicamente igual que split.

'---------------------------------------------------------------------------------------
' Procedure : SplitAlter
' DateTime  : 16/09/2008 22:58
' Author    : Cobein
' Mail      : cobein27@yahoo.com
' Purpose   : Complete Split Replacement
'---------------------------------------------------------------------------------------
Private Function SplitAlter(ByVal Expression As String, Optional ByVal Delimiter As String, Optional ByVal Limit As Long = -1) As String()
    Dim lLastPos    As Long
    Dim lIncrement  As Long
    Dim lExpLen     As Long
    Dim lDelimLen   As Long
    Dim lUbound     As Long
    Dim svTemp()    As String
   
    lExpLen = Len(Expression)
   
    If Delimiter = vbNullString Then Delimiter = " "
    lDelimLen = Len(Delimiter)
    If Limit = 0 Then GoTo QuitHere
    If lExpLen = 0 Then GoTo QuitHere
    If InStr(1, Expression, Delimiter, vbBinaryCompare) = 0 Then GoTo QuitHere
   
    ReDim svTemp(0)
    lLastPos = 1
    lIncrement = 1
   
    Do
        If lUbound + 1 = Limit Then
            svTemp(lUbound) = Mid$(Expression, lLastPos)
            Exit Do
        End If
        lIncrement = InStr(lIncrement, Expression, Delimiter, vbBinaryCompare)
        If lIncrement = 0 Then
            If Not lLastPos = lExpLen Then
                svTemp(lUbound) = Mid$(Expression, lLastPos)
            End If
            Exit Do
        End If
        svTemp(lUbound) = Mid$(Expression, lLastPos, lIncrement - lLastPos)
        lUbound = lUbound + 1
        ReDim Preserve svTemp(lUbound)
        lLastPos = lIncrement + lDelimLen
        lIncrement = lLastPos
    Loop
   
    ReDim Preserve svTemp(lUbound)
    SplitAlter = svTemp
   
    Exit Function
   
QuitHere:
    ReDim SplitAlter(-1 To -1)
End Function
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.