Programación General > Visual Basic para principiantes
Podrian Publicar funciones para procesar Cadena de texto
Jimbenit:
La funcion inversa de esta...
--- Código: Text ---Function CadenaNormal(CadenaASCII As String) As String'Convierte una cadena de formato ASCII en formato normal legible'EJEMPLO:'considere la cadena "4,89,65,73,82"'esta función devuelve "YAIR" Dim NroCaracteres As Long 'Cuenta el numero de caracteres de la cadena ASCIIDim Letr As StringDim NumLet As LongDim PosComas() As LongDim NrsASCII() As StringDim Cont As LongDim ComaDemas As Long 'Si existe una comas demas, esta variable almacena suposicion para su posterior reemplazo CadenaASCII = Trim(CadenaASCII)NroCaracteres = Len(CadenaASCII) For i = 1 To NroCaracteres 'Obtiene el numero de letras de la cadena normal Letr = Mid(CadenaASCII, i, 1) If Asc(Letr) = 44 Then NumLet = Val(Left(CadenaASCII, i - 1)) Exit For End IfNext i ReDim PosComas(NumLet)Cont = 0For i = 1 To NroCaracteres 'Obtiene la posicion de las comas y las introduce en el vetor POSCOMAS Letr = Mid(CadenaASCII, i, 1) If Asc(Letr) = 44 Then Cont = Cont + 1 If Cont > NumLet Then 'Si hay comas demas que no hacen parte de la palabra, sera eliminada ComaDemas = InStr(PosComas(Cont - 1) + 1, CadenaASCII, ",") CadenaASCII = Mid(CadenaASCII, 1, ComaDemas - 1) Exit For End If PosComas(Cont) = i End IfNext i 'Si se introduce un cero, se devuelve vacio ("")If NumLet = 0 Then CadenaNormal = ""'If NumLet = 0 Then Exit SubReDim NrsASCII(NumLet) If NumLet = 1 Then 'Introduce los numeros ASCII en el vector NrsASCII NrsASCII(NumLet) = Mid(CadenaASCII, PosComas(NumLet) + 1)Else For i = 1 To NumLet If i = NumLet Then NrsASCII(i) = Str(Val(Mid(CadenaASCII, PosComas(i) + 1))) Else NrsASCII(i) = Mid(CadenaASCII, PosComas(i) + 1, PosComas(i + 1) - PosComas(i) - 1) End If Next iEnd If For i = 1 To NumLet CadenaNormal = CadenaNormal & Chr(Val(NrsASCII(i)))Next i End Function
Jimbenit:
Mokito, saludos desde Colombia, me gustaria que revisaras el codigo antes de envialo. :good:
--- Cita de: "m0skit0" ---Estilo programación funcional:
No la he probado, así que es sólo teórico ^_^
--- Fin de la cita ---
F_Tanori, es excelente tu función.
--- Citar ---Function ConvertAscii(ByRef as_Cadena As String) As String
On 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 If
End Function
--- Fin de la cita ---
--- Citar ---errorSobrepasa:
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=cadenanormal
--- Fin de la cita ---
Nebire, si asi es... tienes razón, pero para cadenas cortas esta buena, no??
m0skit0:
--- Cita de: "Nilson Yair" ---Revisa el siguiente codigo, no esta bien.
--- Fin de la cita ---
Sip, cierto, había un 5 de más debido a vbNullString.
--- Código: Visual Basic --- Function ConvertAscii(ByRef as_Cadena As String) As String If as_Cadena = vbNullString Then ConvertAscii = "" Else ConvertAscii = CStr(AscB(Left(as_Cadena, 1))) & "," & ConvertAscii(Right(as_Cadena, Len(as_Cadena) - 1)) End If End Function
Sí, tiene una coma de más al final :P
--- Cita de: "Nilson Yair" ---F_Tanori, es excelente tu función.
--- Fin de la cita ---
Tienes un juicio discutible...
En cuanto a tu función inversa es demasiado código para algo tan sencillo.
La inversa de la mía (donde la cadena lleva una coma al final):
--- Código: Visual Basic --- Function ConvertString(ByRef str_Cadena As String) As String If str_Cadena = vbNullString Then ConvertString = "" Else ConvertString = Chr(CInt(Left(str_Cadena, InStr(1, str_Cadena, ",") - 1))) & ConvertString(Right(str_Cadena, Len(str_Cadena) - InStr(1, str_Cadena, ","))) End If End Function
El problema de la coma es fácilmente solucionable fuera de las funciones, así que no lo considero un error. Saludos.
Jimbenit:
--- Citar ---Sí, tiene una coma de más al final :P
Tienes un juicio discutible...
--- Fin de la cita ---
Bueno, mi funcion para pasar a ascii posee una coma demas al final cuando el resultado es un solo numero
Por ejemplo:
'En la ventana inmediato prueba esto:
--- Código: Text ---PRINT convertascii(""),,, cadenaascii("")
La funcio de la izq. es la de F_tenori, y la mia es la de la derecha.
¿Ves la diferencia de la coma?, pero para propositos practicos, esta buena... (hey, me agradas, VEO QUE ESTAS MUY CONECTADO!!!, B) )
Jimbenit:
--- Citar ---En cuanto a tu función inversa es demasiado código para algo tan sencillo.
La inversa de la mía (donde la cadena lleva una coma al final):
Mostrar/Ocultar Número de línea | Expandir/Contraer | Seleccionar todo
1.
2. Function ConvertString(ByRef str_Cadena As String) As String
3.
4. If str_Cadena = vbNullString Then
5. ConvertString = ""
6. Else
7. ConvertString = Chr(CInt(Left(str_Cadena, InStr(1, str_Cadena, ",") - 1))) & ConvertString(Right(str_Cadena, Len(str_Cadena) - InStr(1, str_Cadena, ",")))
8. End If
9.
10. End Function
11.
--- Fin de la cita ---
Estas como que diciendo incoherencias...
Mira esta funcion que pusiste "La inversa", esta mala... ¿Otraves enviando funciones sin probarlas?.... <_<
copia este codigo en la ventana inmediato y prueba esto (con tu funcion inversa)
--- Código: Text ---PRINT convertstring("4,89,65,73,82") El resultado deberia ser "YAIR" pero esto da un error, ¿¿estas practicando programacion funcional?? (cambia de manual)
Moskito, saludos amigo... :good:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa