Public Function DeleteString(ByVal sString As String, ByVal PosComienzo As Long, ByVal Longitud As Long) As String
Ej:
Hola hoy estoy cansado
Call Recortar(s, 4, 4)
Hola estoy cansado
Vale todo el más rápido gana.
DoEvents! :P
Public Function DeleteString_TV1(ByVal sString As String, ByVal PosComienzo As Long, ByVal Longitud As Long)
DeleteString = Replace$(sString, Mid(sString, PosComienzo, Longitud), vbNullString)
End Function
Salu2
HOLA!!!
Esto es la funcion inversa a un mid :S
Aca mi codigo:
Con primera letra POS 0:
Public Function DeleteString7913(ByVal sString As String, ByVal PosComienzo As Long, ByVal Longitud As Long) As String
DeleteString7913 = LeftB$(sString, PosComienzo + PosComienzo) & RightB$(sString, LenB(sString) - (PosComienzo + PosComienzo + Longitud + Longitud))
End Function
GRACIAS POR LEER!!!
a = PosComienzo + PosComienzo
a = PosComienzo *2
:huh: :huh: :huh:
HOLA!!!
@Elemental:
Sumar x valores iguales es mas rapido que multiplicar por x
;)
GRACIAS POR LEER!!!
Se supone que el primer indice de un caracter es el 1 no el 0... respecto a la string claro...
Ej:
Hola hoy estoy cansado
Call Recortar(s, 4, 4)
Holy estoy cansado
Vale todo el más rápido gana.
Dulces Lunas!¡.
HOLA!!!
Cita de: BlackZeroX (Astaroth) en 21 Octubre 2011, 17:57 PM
Se supone que el primer indice de un caracter es el 1 no el 0... respecto a la string claro...
Ej:
Hola hoy estoy cansado
Call Recortar(s, 4, 4)
Holy estoy cansado
Vale todo el más rápido gana.
Dulces Lunas!¡.
Respetando el enunciado y ejemplos...
La primera letra es Pos = 0
GRACIAS POR LEER!!!
;D
Funcion -> Eliminar pedazo de cadena, con su INICIO (VARIABLE) y su fin (VARIABLE)
Function nico(ByVal testo As String, ByVal posini As Long, ByVal posfin As Long)
final = Replace$(testo, (Mid(testo, posini, posfin)), "")
MsgBox final
Uso:
sData = "-Viernes-21/10/2011"
inicio = 1 'Desde la primera letra hasta.......
fin = Len(sData) - 10 'Contamos los caracteres y le sacamos 10, que son los unicos que quiero dejar. Si sabemos que empieza en la primera letra, y que los ultimos 10 caracteres quiero dejar, sacara todo y dejara solo los ultimos 10 XD
nico (sData), inicio, fin
offffffffffffffffffff: creo que no entendi la consigna XD, pero me di cuenta que...
sData = "-Viernes-21/10/2011"
inicio = 1
fin = Len(sData) - 10
cancer = Replace(sData, Mid(sData, inicio, fin), "")
MsgBox cancer
Cita de: Psyke1 en 21 Octubre 2011, 10:18 AM
Vale todo el más rápido gana.
>:D
Option Explicit
Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Any, ByVal pSrc As Any, ByVal ByteLen As Long)
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Long)
Private Declare Sub PutMem2 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Integer)
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal RetVal As Long)
Public Function DeleteString_BZX(ByVal sString As String, ByVal lPosIni As Long, ByVal lSize As Long) As String
Dim lLnb As Long
Dim lpStr As Long
If ((lSize Or lPosIni) And &H80000000) Then Exit Function
lLnb = LenB(sString)
if (lLnb = &H0) then exit function
lSize = (lSize + lSize)
lPosIni = (lPosIni + lPosIni)
If (lPosIni >= lLnb) Then Exit Function
lpStr = (lPosIni + lSize)
If (lpStr > lLnb) Then
lSize = (lLnb - lPosIni)
End If
GetMem4 VarPtr(sString), VarPtr(lpStr)
If (lSize > &H0) Then
lLnb = (lLnb - lSize)
If (lLnb > lPosIni) Then
RtlMoveMemory (lPosIni + lpStr), ((lPosIni + lpStr) + lSize), (lLnb - lPosIni)
'MidB$(sString, (lPosIni + 1), (lLnb - lPosIni)) = MidB$(sString, (lPosIni + lSize + 1), (lLnb - lPosIni))
End If
End If
PutMem2 ByVal (lpStr + lLnb), &H0
PutMem4 ByVal (lpStr - &H4), lLnb
PutMem4 VarPtr(DeleteString_BZX), lpStr
PutMem4 VarPtr(sString), &H0
End Function
Private Sub Form_Load()
Debug.Print DeleteString_BZX("BlackZeroX", -1, 4), Len(DeleteString_BZX("BlackZeroX", -1, 4))
Debug.Print DeleteString_BZX("BlackZeroX", 9, 4), Len(DeleteString_BZX("BlackZeroX", 9, 4))
Debug.Print DeleteString_BZX("BlackZeroX", 0, -4), Len(DeleteString_BZX("BlackZeroX", 0, -4))
Debug.Print DeleteString_BZX("BlackZeroX", 1, 4), Len(DeleteString_BZX("BlackZeroX", 1, 4))
Debug.Print DeleteString_BZX("BlackZeroX", 0, 4), Len(DeleteString_BZX("BlackZeroX", 0, 4))
Debug.Print DeleteString_BZX("BlackZeroX", 0, 400), Len(DeleteString_BZX("BlackZeroX", 0, 400))
End Sub
Temibles Lunas!¡.
Más tarde publico la mía.
DoEvents! :P
Cita de: BlackZeroX (Astaroth) en 21 Octubre 2011, 19:27 PM
Cita de: Psyke1 en 21 Octubre 2011, 10:18 AM
Vale todo el más rápido gana.
>:D
>:D
Option Explicit
Private Declare Sub RtlMoveMemory Lib "kernel32" (ByVal pDst As Long, ByVal pSrc As Long, ByVal ByteLen As Long)
Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long
Public Static Function RemoveStr_Psyke1(ByVal sText As String, ByVal lPosIni As Long, ByVal lLen As Long) As String
Dim lLenB As Long
Dim lpString As Long
lLenB = LenB(sText)
If lLenB Then
If (lPosIni Or lLen) And &H80000000 Then Exit Function
lLen = (lLen + lLen)
lPosIni = (lPosIni + lPosIni)
If (lPosIni + lLen) = lLenB Then lLen = lLenB
If (lLen = lLenB) And (lPosIni = 0&) Then
RemoveStr_Psyke1 = sText
Exit Function
End If
lpString = StrPtr(sText)
RtlMoveMemory (lpString + lPosIni), (lpString + lPosIni + lLen), (lLenB - lPosIni + lLen)
RtlMoveMemory VarPtr(RemoveStr_Psyke1), VarPtr(SysAllocStringByteLen(lpString, lLenB - lLen)), 4&
End If
End Function
Private Sub Form_Load()
MsgBox RemoveStr_Psyke1("hola amigo 123456789", 4, 6)
End Sub
DoEvents! :P
@Psyke1
Tu funcion Crashea!¡.
Debug.Print RemoveStr_Psyke1("BlackZeroX", -1, 4), Len(RemoveStr_Psyke1("BlackZeroX", -1, 4))
Debug.Print RemoveStr_Psyke1("BlackZeroX", 9, 4), Len(RemoveStr_Psyke1("BlackZeroX", 9, 4))
Debug.Print RemoveStr_Psyke1("BlackZeroX", 0, -4), Len(RemoveStr_Psyke1("BlackZeroX", 0, -4))
Debug.Print RemoveStr_Psyke1("BlackZeroX", 1, 4), Len(RemoveStr_Psyke1("BlackZeroX", 1, 4))
Debug.Print RemoveStr_Psyke1("BlackZeroX", 0, 4), Len(RemoveStr_Psyke1("BlackZeroX", 0, 4))
Debug.Print RemoveStr_Psyke1("BlackZeroX", 0, 400), Len(RemoveStr_Psyke1("BlackZeroX", 0, 400))
Dulces Lunas!¡.
A mí no me crashea con más de tres llamadas... :rolleyes:
Prueba a quitar el Static por si acaso...
DoEvents! :P
Cita de: Psyke1 en 23 Octubre 2011, 21:50 PM
A mí no me crashea con más de tres llamadas... :rolleyes:
... Nada tiene que ver
static (Que por cierto static para procesos carece de la funcionalidad habitual de llamada a funcion/proceso sin instanciar la clase y por ende esta demas en una funcion miembro static para variables (http://www.zator.com/Cpp/E4_1_8c.htm) muy diferente a static para miembros de clases (http://www.zator.com/Cpp/E4_11_7.htm) y TODO esto deberia ser lo mismo para vb6, pero no es asi).
* El unico uso que le preveo es una Generalizacion de la declaracion static para las declaraciones internas para EVITAR que se autodestruyan las variables.
Mira este codigo:
Option Explicit
Private Sub Form_Load()
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
Debug.Print holaNoStatic, holaStatic
End Sub
Public Function holaNoStatic() As String
Dim a As Integer
Debug.Print "[a=" & VarPtr(a) & "]",
holaNoStatic = a
a = a + 1
End Function
Public Static Function holaStatic() As String
Dim a As Integer
Debug.Print "[a=" & VarPtr(a) & "]"
holaStatic = a
a = a + 1
End Function
Revisa tu funcion con las 6 pruebas que deje en el anterior post.
Dulces Lunas!¡.
Cuando se Hacen los Test?
Dulces Lunas!¡.