Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ‭‭‭‭jackl007 en 26 Abril 2009, 17:33 pm



Título: Funcion Frag - alternativa a split
Publicado por: ‭‭‭‭jackl007 en 26 Abril 2009, 17:33 pm
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:
(http://www.tienspiura.com/jackl007/FuncionFrag-test.PNG)

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
  1. Public Function Frag(ByVal Cad As String, dLim As String, X As Integer) As String
  2. Dim i, a As Integer
  3. Dim Encontrado As Boolean
  4. For a = 1 To X
  5. i = InStr(1, Cad, dLim)
  6.    If i = 0 Then
  7.        If Encontrado = False Then
  8.            Frag = Cad
  9.            Encontrado = True
  10.        Else
  11.            Frag = "NotFound"
  12.        End If
  13.    Else
  14.        Frag = Mid(Cad, 1, i - 1)
  15.        Cad = Mid(Cad, i + Len(dLim))
  16.    End If
  17. Next a
  18. End Function
  19.  
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...


Título: Re: Funcion Frag - alternativa a split
Publicado por: cobein en 26 Abril 2009, 17:49 pm
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.
Código:
'---------------------------------------------------------------------------------------
' 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