Programación General > Visual Basic para principiantes

 Podrian Publicar funciones para procesar Cadena de texto

(1/8) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa