Programación General > Visual Basic para principiantes

 Podrian Publicar funciones para procesar Cadena de texto

<< < (5/8) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa