Programación General > Visual Basic para principiantes
Podrian Publicar funciones para procesar Cadena de texto
Jimbenit:
Al principio de este post dije:
--- Citar ---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
--- Fin de la cita ---
Cierto???
Pues bien, el numero de caracteres leidos esta especificado por el primer numero que aparece en la cadena, por que si no es asi entonces ¿De que serviría estar en la cadena?
Con lo anterior quiero decir que no importa cuantos numeros aparezcan en esta cadena, solo seran leidos la cantidad de caracteres que se especifiquen en el primer numero de la cadena.
B) Pero... me impresiona mucho la capacidad de este codigo... en serio....
Muy bien.... muy bien hecho... de verdad..
Jimbenit:
B) Excelente Tanori... excelente :good:
:lol: Fue divertido, no???
Jimbenit:
[INICIANDO NUEVA FUNCION]
Ya que ninguno publica sus funciones de procesamientos de texto, el cual es el objetivo principal de este post, yo publicaré otra de mis funciones de procesamiento de texto
En cierta ocasión una vez tuve que diseñar un codigo que me permitiera guardar datos en un bloc de notas pero con un formato muy especial , este formato es el siguiente:
El bloc de notas debia ser organizado por filas y columnas, y guardar los datos de acuerdo a esta posición.
Ejemplo:
--- Código: Text ---Call EscribirDatoMATRIZ(3, 10, "Cadena guardada en (F= 10, C=3)", "C:BlocMio.txt") Lo anterior guarda "Cadena guardada en (F= 10, C=3)" en la posicion : fila 10 , columna 3 del orden que se invento en esta función[/color], las comas separan las COLUMNAS y las filas del bloc de notas separan las FILAS de este formato
Si quisiera guardar el numero 20, de acuerdo al orden aqui descrito en la posicion Fila = 4, Columna = 3: el codigo seria el siguiente:
--- Código: Text ---Call EscribirDatoMATRIZ(3, 4, 20, "C:BlocMio.txt") "C:BlocMio.txt" es la ruta donde este archivo se guarda.
[/color]
El proceso es el siguiente:
--- Código: Text ---Sub EscribirDatoMATRIZ(Colum As Long, Fila As Long, Dato As Variant, RutaArchivo As String)'Guarda datos en un bloc notas en forma de comas... utiliza el bloc'como una matriz ordenada por filas y columnas... [Mayo 5 / 2008] Dim Contador As DoubleDim Vector() As VariantDim Caracter As StringDim Max As DoubleDim Linea As LongDim Cadena As StringDim NumLet As LongDim Letr As StringDim Cont As LongDim PosComas() As LongDim Pedazo1 As StringDim Pedazo2 As StringDim Comas_Add As Long If Dir(RutaArchivo) = "" Then 'Comprueba si existe archivo, en caso de no existir, lo crea. Open RutaArchivo For Output As #1 Print #1, " " Close #1End If Linea = Fila For j = 1 To 2 'Introduce todas las lineas del Bloc notas en un Vector llamado Vector() Open RutaArchivo For Input As #1 While Not EOF(1) 'Cuenta las lineas del Bloc Notas Line Input #1, Caracter i = i + 1 If j = 1 Then Contador = i ElseIf j = 2 Then 'Si j = 2 , se escriben las lineas dentro del vector Vector(i) = Caracter End If Wend Close #1 If j = 1 Then If Linea > Contador Then 'Define el tamaño del vector ReDim Vector(1 To Linea) Max = Linea Else ReDim Vector(1 To Contador) Max = Contador End If i = 0 End IfNext j For i = 1 To Max 'Obtiene la fila en string separada por comas If i = Fila Then Cadena = Vector(i) End IfNext i 'Obtención de las posiciones de las comas'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NumLet = Len(Cadena) For i = 1 To NumLet 'Cuenta las comas dentro de la cadena Letr = Mid(Cadena, i, 1) If Asc(Letr) = 44 Then Cont = Cont + 1 End If Next i If Colum > Cont + 1 Then 'Columna vacia Comas_Add = Colum - (Cont + 1) For i = 1 To Comas_Add Cadena = Cadena & ", " Next i Cont = Colum - 1 End If NumLet = Len(Cadena) ReDim PosComas(Cont) Cont = 0 For i = 1 To NumLet 'Coloca las posiciones de las comas dentro del vector Letr = Mid(Cadena, i, 1) If Asc(Letr) = 44 Then Cont = Cont + 1 PosComas(Cont) = i End If Next i'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 'Añadiendo el dato a la cadena [Elimina el dato anterior en esa posición]If Cont = 0 Then Cadena = DatoElseIf Colum = 1 Then 'Coloca el dato al principio Cadena = Dato & Mid(Cadena, PosComas(1))ElseIf Colum = UBound(PosComas()) + 1 Then 'Coloca el dato al final Cadena = Mid(Cadena, 1, PosComas(Colum - 1)) & DatoElse Pedazo1 = Mid(Cadena, 1, PosComas(Colum - 1)) Pedazo2 = Mid(Cadena, PosComas(Colum)) Cadena = Pedazo1 & Dato & Pedazo2End If 'Escribiendo en el Bloc NotasOpen RutaArchivo For Output As #1For i = 1 To Max If i = Linea Then Vector(i) = Cadena Print #1, Vector(i) Else Print #1, Vector(i) End IfNext iClose #1 End Sub
m0skit0:
Interesante discusión, chavales. Aunque os falta un poco de experiencia en programación ^_^ (es broma, no se piquen)
¿Para qué quieres poner la longitud al principio? Me parece una perdida de tiempo, aunque acepto que sea el enunciado. De todas formas, se puede quitar antes de llamar a la función.
Ay, Nilson, a ver si leemos
--- Cita de: "Nilson Yair" ---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")
--- Fin de la cita ---
--- Cita de: "m0skit0" ---La inversa de la mía (donde la cadena lleva una coma al final):
--- Fin de la cita ---
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
--- Fin de la cita ---
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
--- Código: Visual Basic --- aux = ConvertAscii("Vaya códigos")'aux sin coma al finalaux = Left(aux, Len(aux) - 1)[...]a_convertir = "55,56,57,58"'necesitamos una coma al finalaux = ConvertString(a_convertir & ",")
¡Vaya complicación, no? :lol:
F_Tanori:
--- Cita de: "m0skit0" ---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
--- Fin de la cita ---
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
--- Fin de la cita ---
Tirarla por la borda? de que hablas willy?
A que hora dije que "no servia", el fin de esto era "resolver el problema" , todos tenemos formas programacion diferente, asi como la resolucion de problemas y jamas dije que tu funcion no sirviera, pero creo que en todo el hilo tus funciones no cumplian (por eso es un error lo de la coma) con lo que tenian que hacer segun el problema planteado (que era solo un ejercicio) puedes hacer la funcion mas optimizada para sumar y decir que se ejecuta en el menor tiempo posible , pero tiene un problema cuando agregas mas de 2 numeros no suma, pero no es un error porque se puede arreglar :o :)
en fin...
y si he oido de lo que me preguntas ? tienes algun problema para comprenderlo ? ocupas alguna explicacion ? :P
Saludos
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa