Programación General > Visual Basic para principiantes

 Podrian Publicar funciones para procesar Cadena de texto

<< < (2/8) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa