Autor
|
Tema: [SRC] + [Función] Text_Between_Words [by *PsYkE1*] (Leído 6,678 veces)
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Gracias Black! Corregire esos detalles... Se puede hacer en una linea! En cuanto a lo del Msgbox lo hice para que fuera mas grafico, para no meter el resultado de la funcion en una variable... Como me recomiendas ponerlo?¿ Salu2!
|
|
« Última modificación: 1 Junio 2010, 00:14 am por *PsYkE1* »
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
si se puede en una linea lo malo es que se usan variadas veces Len() o Instr() o X cosa yo pefiero hacerlo una sola vez aun que sean mas lineas. Private Function TextoEntreMedio(Texto As String, Palabra1 As String, Palabra2 As String) TextoEntreMedio = Left$(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), InStr(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), Palabra2) - 1) End Function
y lo del msgbox como dije no metas nada dentro de una funcion a mi personalmente no me convence por que no es DINAMICO. A se me paso lo del Mid() cuando uses un string usa Mid$() en lugar de Mid() es cuando tomas X texto y lo almacenas en una variable tipo strinmg o similar!¡. Dulce Infierno Lunar!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
mmmmmmmm OK Porque no es aconsejable utilizar muchas veces Len() o Instr()?? Lo de Mid$() lo sabia, pero se me olvido... (ya esta corregido) Gracias!
|
|
|
En línea
|
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
mmmmmmmm OK Porque no es aconsejable utilizar muchas veces Len() o Instr()?? Lo de Mid$() lo sabia, pero se me olvido... (ya esta corregido) Gracias! 1er Caso:Donde 12 +5 se repite una sola vez y se usa su resultado: Variable1 = 12 + 5 Variable2 = Variable1 + 7 + 2 + Variable1
2do Caso:Donde (12+5) se repite 3 veces. Variable1 = (12 + 5) + (12 + 5) + 7 + 2 + (12 + 5)
Ahora imagina que ese (12 + 5) te conlleva 15 segundos: 1er Caso: Calculo de (12+5 = 15 seg ) + Segundos extras 2do Caso: Como se repite (12+5) tres veces: (12+5) = 15 segundos por 3 = 45 segundos + segundos extras Conclusion: Si puedes almacenar el resultado de una funcion o x dato en una variable será mas optimo por que no se repite el proceso inesesariamente!¡. En otras Palabras las cosas minimalistas NO SIEMPRE son las mas optimas y adaptables!¡. P.D.: Como dice Seba123Neo esa funcionla sa que de el post que cito.} Dulce Infierno Lunar!¡.
|
|
« Última modificación: 1 Junio 2010, 06:49 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
por si no te fijaste, la que posteo BlackZeroX▓▓▒▒░░ , ya te la habia puesto en este post: [Ayuda] Leer texto webAJAJAJA No me habia fijado... Gracias por la explicacion BlackZeroX▓▓▒▒░░! Salu2!
|
|
|
En línea
|
|
|
|
cobein
|
Todas las funciones esas tiene un problema de logica..... Si, por ejemplo, hago una busqueda asi Const StrOri As String = "Miguel Angel Ortega Avila" Const StrIni As String = "El" Const StrFin As String = "el" el resultado va a ser nulo porque se comienza a buscar desde el principio en ambas ocasiones y en realidad la segunda palabra se tiene que buscar a partir del final de la primera..... Public Function Entre_Texto(ByRef StrIn As String, ByVal StrIni As String, ByVal StrFin As String, Optional ComparacionEstricta As Boolean) As String Dim Pos(1) As Long Dim IniPos As Long If Len(StrIn) Then Pos(0) = InStr(1, StrIn, StrIni, Abs(Not ComparacionEstricta)) If Pos(0) = 0 Then Exit Function IniPos = Pos(0) + Len(StrIni) Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta)) If Pos(1) = 0 Then Exit Function Entre_Texto = Mid$(StrIn, IniPos, Pos(1) - IniPos) End If End Function Private Sub Form_Load() Const StrOri As String = "Miguel Angel Ortega Avila" Const StrIni As String = "El" Const StrFin As String = "el" 'MsgBox Text_Between_Words(StrOri, StrIni, StrFin) 'MsgBox TextoEntreMedio(StrOri, StrIni, StrFin) Debug.Print Entre_Texto(StrOri, StrIni, StrFin, True) Debug.Print Entre_Texto(StrOri, StrIni, StrFin, False) End Sub
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
@Cobein Public Function Entre_Texto(ByRef StrIn As String, ByVal StrIni As String, ByVal StrFin As String, Optional ComparacionEstricta As Boolean) As String Dim Pos(1) As Long Dim IniPos As Long Dim OptionalCompare As VbCompareMethod If Len(StrIn) > 0 Then If ComparacionEstricta Then OptionalCompare = vbBinaryCompare Else OptionalCompare = vbTextCompare End If Pos(0) = InStr(1, StrIn, StrIni, OptionalCompare) Pos(1) = InStr(1, StrIn, StrFin, OptionalCompare) If CBool(Pos(0)) And CBool(Pos(1)) And Pos(0) < Pos(1) Then IniPos = Pos(0) + Len(StrIni) Entre_Texto = Mid$(StrIn, IniPos, Pos(1) - IniPos) End If End If End Function Public Function Entre_Texto_EditCobein(ByRef StrIn As String, ByVal StrIni As String, ByVal StrFin As String, Optional ComparacionEstricta As Boolean) As String Dim Pos(1) As Long Dim IniPos As Long If Len(StrIn) Then Pos(0) = InStr(1, StrIn, StrIni, Abs(Not ComparacionEstricta)) If Pos(0) = 0 Then Exit Function IniPos = Pos(0) + Len(StrIni) Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta)) If Pos(1) = 0 Then Exit Function Entre_Texto_EditCobein = Mid$(StrIn, IniPos, Pos(1) - IniPos) End If End Function Private Sub Form_Load() Const StrOri As String = "Miguel Angel Ortega Avila" Const StrIni As String = "El" Const StrFin As String = "el" Debug.Print "BlackZeroX" Debug.Print "with true """; Entre_Texto(StrOri, StrIni, StrFin, True); """" Debug.Print "with false """; Entre_Texto(StrOri, StrIni, StrFin, False); """" Debug.Print "Cobein" Debug.Print "with true """; Entre_Texto_EditCobein(StrOri, StrIni, StrFin, True); """" Debug.Print "with false """; Entre_Texto_EditCobein(StrOri, StrIni, StrFin, False); """" End Sub
Creo que no viste esta linea!¡. If CBool(Pos(0)) And CBool(Pos(1)) And Pos(0) < Pos(1) ThenAunque Cbool() se vea un poco demas solo es para compresion igual se quita. Dulñce Infierno Lunar!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
cobein
|
IniPos = Pos(0) + Len(StrIni) Pos(1) = InStr(IniPos, StrIn, StrFin, Abs(Not ComparacionEstricta))
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
ya Sorry xP se me paso ¬¬", aunque igual con la comparacion de aquella linea no deja seguir (y mira que postee el formato en este hilo).
Edito: Aun asi es un error grave!¡.
Dulce Infierno
|
|
« Última modificación: 2 Junio 2010, 07:08 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
|