Estilo programación funcional:
No la he probado, así que es sólo teórico ^_^
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
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
Revisa el siguiente codigo, no esta bien.
F_Tanori, es excelente tu función.
Sí, tiene una coma de más al final :P
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):
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.
MOSKITO DICE:
Tienes un juicio discutible...
En cuanto a tu función inversa es demasiado código para algo tan sencillo.
MOSKITO DICE:
El problema de la coma es fácilmente solucionable fuera de las funciones, así que no lo considero un error
CitarMOSKITO DICE:
El problema de la coma es fácilmente solucionable fuera de las funciones, así que no lo considero un error
Bien, y que me dices del primer caracter generado por tu funcion...?Código: Text
print convertstring("4,89,65,73,82,") YAIR
if len(cadenanormal)>16383 then
msgbox "Existen posibilidades de que se produzca un error..."
end if
Nuevamente, F_Tanori... muy bien por la función inversa.No quiero decir que la de F_Tanori sea perfecta, de hecho no lo es...
Cuando digo:CitarNuevamente, F_Tanori... muy bien por la función inversa.No quiero decir que la de F_Tanori sea perfecta, de hecho no lo es...
miremos el siguiente codigo... comparemos.Código: Text
print ConvertString_FTanori("4,89,65,73,82,15,65"),,cadenanormal("4,89,65,73,82,15,65") YAIRA YAIR
A la izquierda la de Tanori; a la derecha, la mia
¿Que paso?, parece que la de Tanori no usa el primer numero (4) como parametro de cantidad de lectura de la función
Ahora si ven por que no es perfecta?
Error Tanori
Miremos el sigueinte codigo:Código: Text
For i = LBound(AsciiCode) + 1 To UBound(AsciiCode) 'El limite superior no es el primer numero de la cadena?, o acaso es el numero de comas??
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
Moskito no se donde tiene la cabeza, su funcion tiene un error es el siguiente ejemplo:
Mostrar/Ocultar Número de línea | Expandir/Contraer | Seleccionar todo
1. print convertstring("1")
La inversa de la mía (donde la cadena lleva una coma al final):
ocurrira un error sin una coma al final lo cual a mi si me parece un error
En cuanto a F_tanori...Cita de: "F_Tanori"ocurrira un error sin una coma al final lo cual a mi si me parece un error
Otra tontería. Si consigues una función que haga un determinado trabajo de la forma más sencilla, me parece absurdo tirarla por la borda porque falte o deje de faltar una coma al final. Hay que subdividir los problemas hasta lo más sencillo posible y luego unirlos ¿Habéis oído hablar de Right() y Left() y concatenación? :P
pero tiene un problema cuando agregas mas de 2 numeros no suma
P.D(2): No sé quién es Willy... :D
Otra tontería. Si consigues una función que haga un determinado trabajo de la forma más sencilla, me parece absurdo tirarla por la borda ...
Yo sigo con mi programación funcional en VB ( :lol: :lol: )Código: Visual Basic
Public Function InvertirCadena(ByVal str As String) As String If Len(str) <= 1 Then InvertirCadena = str Else InvertirCadena = Right(str, 1) & InvertirCadena(Left(Right(str, Len(str) - 1), Len(str) - 2)) & Left(str, 1) End If End Function
Cuidado con quedarse sin pila XD
solo que deberias de usar el parametro ByRef para utilizarlo como "puntero" y no estarlo pasando como copia a cada llamado de la funcion
Lo que me lleva a preguntarles:Interesante pregunta. A título personal (porque de forma general dudo que pueda darse una respuesta exacta.... y que todo el mundo esté de acuerdo) creo que uno tiene que hacer un balance en su código.
¿Qué creen que compensa más: que el código se ejecute más rápido o que sea más legible? <_<
Esto carece de sentido la función len(texto) resuelve el caso, no necesita por tanto travestirse de propiedad.
Public Property Get CuentaLetras() As String
CuentaLetras = dLetras
End Property
Public Property Let CuentaLetras(ByVal vNewTexto As String)
cTexto = vNewTexto
dLetras = Len(cTexto)
End Property
Aquí varios comentarios, comentario 1 en la parte 'GET' puede verse también en el anterior. Si cuentapalabra suponemos que es una cifra a qué leches viene poner un 'string' ????. Yo te lo digo... a que haces algo impropio, algo impropio es asignar un valor a allgo que realmente no le pertenece, es como vestir a un mono de santo o como poner un remolque a un Formula-1. Al parecer no sabes cuando algo debe ser una propiedad y cuando una función. Yo te lo explico: si cuando introduces un dato es un tipo de datos y cuando debe devolver un dato devuelve un tipo de datos distinto al que se pedía como parámetro, eso es lo que describe una función. si el tipo de datos pasado por parámetro se ha de retener y en otra ocasión se puede pedir y es el mismo tipo de datos, eso es para usar como propiedad... si el parámetro se pasa e inmediatamente hace algo y ese dato no ha de quedar retenido eso es un método...
Public Property Get CuentaPalabra() As String
CuentaPalabra = wordCount
End Property
Public Property Let CuentaPalabra(ByVal vNewValue As String)
Public Property Get TodoMayus() As String ... End PropertySon inútiles por redundantes, como ya se dijo antes una función que resuleve un caso no debe trasvestirse, para hacer lo mismo pero ralentizándolo...
Public Property Get TodoMinus() As String ... End Property
Public Property Get Normal() As String
Normal = DNormal
End Property
Public Property Let Normal(ByVal vNewValue As String)
DNormal = vNewValue
End Property
Te complicas en exceso, para eso existe la función INSTR . Con instr vas comprobando donde empiza y terminan las palabras... ya que leer carácter a carácter es bastante lento, conviene delegar en una función más potente o recurrir a la API, para textos de pocas palabras puede valerte pero si por ejemplo tratas de buscar una texto en un dado número de ficheros la búsqueda sería muy lenta.
Public Property Get PalabraExtraida(Text1 As TextBox, Numero As Integer)
Public Property Get TextReverso() As Variant
TextoReves = StrReverse(cTexto)
TextReverso = TextoReves
End Property
Aca les dejo algo interesante para hacer casi de todo con textofrancamente resulta desacertada aparte de queen cuanto a completitud no representa nada.