Programación General > Visual Basic para principiantes
Podrian Publicar funciones para procesar Cadena de texto
Jimbenit:
Aveces es necesario procesar cadenas de texto, sé que muchos de ustedes se han encontrado con que tienen que diseñar funciones o sub-procedimientos para poder procesar cadenas de texto de una manera muy especial.
Pues este post lo hice con la intencion para que publiquen sus funciones (esas que ustedes han diseñado) que trabajen con cadenas de TEXTO.
Empiezo yo.
En cierta ocasion tuve que diseñar una funcion que me pasara una cadena de texto en sus equivalentes ASCII, pero con un formato especial, por ejemplo:
"Hola mundo"
El resultado debia ser:
10,72,111,108,97,32,109,117,110,100,111
Donde el primer numero indica el numero de caracteres de la cadena y los demas numeros son sus equivalentes ASCII
La funcion es la siguiente:
--- Código: Text ---Function CadenaASCII(CadenaNormal As String) As String'Esta funcion recibe una cadena y como resultado da'El numero de caracteres con los caracteres pasados a sus valores'de la tabla ASCII'EJEMPLO:'CadenaASCII("YAIR")'da como resultado'4,89,65,73,82'Donde el primer numero (4), es el numero de caracteres'Y los siguientes numeros son las letras en sus valores ASCII Dim NumLet As LongDim LetrASCII As StringDim Cadena As StringCadena = CadenaNormalCadena = Trim(Cadena)NumLet = Len(Cadena) For i = 1 To NumLet LetrASCII = Asc(Mid(Cadena, i, 1)) If NumLet = 1 Then CadenaASCII = LetrASCII ElseIf i = 1 Then CadenaASCII = LetrASCII & "," ElseIf i = NumLet Then CadenaASCII = CadenaASCII & LetrASCII Else CadenaASCII = CadenaASCII & LetrASCII & "," End IfNext i CadenaASCII = NumLet & "," & CadenaASCII End Function
Copienla en un modulo y pruebenla en la ventana inmediato y luego me cuentan que les parece,
Publiquen las suyas!!
saludos.
Nebire:
Esa misma función puede optimizarse ... y no precisa señalar cuantos caracteres tiene.
el trim no deberías hacerlo ya que si la idea es convertir una cadena de texto a una equivalente numérica estarías eliminado información, si resultara necesario hacerlo entonces debe especificarse claramente 'quitar espacios a ambos lados y convertirla a....' pero entonces el nombre de la función habría que cambiarla ya que así se prestaría a confusión.
Por ejemplo:
--- Código: Visual Basic --- Function CadenaASCII(CadenaNormal As String) As String dim k as long, cadena as string on local error goto errorSobrepasa: if cadenanormal="" then exit function if len(cadenanormal)=1 then CadenaASCII= asc(cadenanormal) exit function else if len(cadenanormal)>16383 then msgbox "Existen posibilidades de que se produzca un error..." end if end if for k=1 to len(cadenanormal)-1 ' el último carácter lo quedamos fuera del bucle cadenanormal=cadenanormal & asc(mid$(cadenanormal,k,1)) & "," next ' al finalizar el bucle, k todavía aumenta en 1 cadenanormal=cadenanormal & asc(mid$(cadenanormal,k,1)) ' tras el último carácter no añadimos la coma CadenaASCII=cadenanormal exit functionerrorSobrepasa: msgbox "Cada carácter de entrada genera entre 2 y 4 caracteres de salida. en VB6 el tamaño máximo de una cadena son 65535 caracteres, dicho valor se ha alcanzado con el " & k " ésimo carácter de la cadena de entrada..." & vbcrlf & err.description CadenaASCII=cadenanormalend sub Simplemente quitamos las comprobaciones , enlentecen el trabajo y solo va a entrar en las comprobaciones 1 vez cuando es el primer carácter, pero se comprueba con cada carácter, en todo caso ese carácter hacerlo antes del bucle y para el último carácter lo mismo, sólo entrará en el último ciclo del bucle por tanto acortamos el ciclo en una unidad y al final añadimos el último carácter, pero ahorrándonos , las comprobaciones con cada carácter.
Por cierto tu función dará error cuando le pases una cadena de cierto tamaño... lee los msgbox que he puesto en el código.
En otro momento te pongo una función de esas que pides...
F_Tanori:
A ver prueba esta a ver si te funciona
--- Código: Visual Basic ---Function ConvertAscii(ByRef as_Cadena As String) As StringOn Error GoTo xError Dim i As Integer, AsciiCode() As Byte AsciiCode = as_Cadena For i = LBound(AsciiCode) To UBound(AsciiCode) Step 2 ConvertAscii = ConvertAscii & Format(AsciiCode(i), ",00") Next i ConvertAscii = (i / 2) & ConvertAscii xError: If Err.Number > 0 Then ConvertAscii = Err.Description Err.Clear End IfEnd Function
Saludos
m0skit0:
Estilo programación funcional:
--- Código: Visual Basic --- Function ConvertAscii(ByRef as_Cadena As String) As String If as_Cadena = vbNullString Then ConvertAscii = vbNullString Else ConvertAscii = CStr(AscB(Left(as_Cadena,1))) & ConvertAscii(Right(as_Cadena,Len(as_Cadena) - 1)) End IfEnd Function
No la he probado, así que es sólo teórico ^_^
Jimbenit:
Moskito. Revisa el siguiente codigo, no esta bien.
--- Código: Text ---Function ConvertAscii(ByRef as_Cadena As String) As String If as_Cadena = vbNullString Then ConvertAscii = vbNullString Else ConvertAscii = CStr(AscB(Left(as_Cadena,1))) & ConvertAscii(Right(as_Cadena,Len(as_Cadena) - 1)) End If End Function
Navegación
[#] Página Siguiente
Ir a la versión completa