Título: [Duda] - Tratamiento de dos cadenas y comparacion Publicado por: dont'Exist en 12 Abril 2017, 06:04 am Buenas noches a todos. Les hago una pregunta.
Tengo en un formulario un TextBox (oculto) un texto en el cual está correctamente escrito, sin errores. Y otro TextBox el cual se ve, en el cual debo intentar escribir lo que está en el TextBox oculto lo más correctamente posible. De no estar correctamente escrito en este último, que me cuente la cantidad de errores existentes y si es posible, también marcar cuáles fueron los errores. ¿Es posible hacer esto desde VB.NET? Vi en algunas páginas proyectos hechos donde implementan RichTextBox, y en otros casos algo relacionado con XAML, pero la verdad es que no he conseguido salir de este problema. Espero que me puedan, al menos orientar de cómo hacerlo en el caso de que sea posible. PD: Mi idea es intentar hacer algo parecido a lo que es el programa de mecanografía Typing Master en una de sus funciones cuando compara y muestra los errores, como para que tengan una idea de lo que intento realizar. Muchas gracias a todos, saludos! Título: Re: [Duda] VB.NET - Comparar dos cadenas de texto y mostrar diferencias Publicado por: Serapis en 12 Abril 2017, 17:05 pm Tengo en un formulario un TextBox (oculto) un texto en el cual está correctamente escrito, sin errores. Y otro TextBox el cual se ve, en el cual debo intentar escribir lo que está en el TextBox oculto lo más correctamente posible. Básicamente eso es lo que hace el juego del Mastermind. Lo único que cambia es que en el mastermind, se usan bolas de colores y tu usas letras y bueno, como es un juego se da un límite máximo de intentos.De no estar correctamente escrito en este último, que me cuente la cantidad de errores existentes y si es posible, también marcar cuáles fueron los errores. Guglea si qieres buscando código. ¿Es posible hacer esto desde VB.NET? Qué, cómo.?????????Vi en algunas páginas proyectos hechos donde implementan RichTextBox, y en otros casos algo relacionado con XAML, pero la verdad es que no he conseguido salir de este problema. Se puede complicar uno la vida todo lo que quiera, pero basta con tu idea original, incluso sin siquiera ese textbox oculto, basta que esté en una variable del código.PD: Mi idea es intentar hacer algo parecido a lo que es el programa de mecanografía Typing Master en una de sus funciones cuando compara y muestra los errores, como para que tengan una idea de lo que intento realizar. Ahora mismo, no caigo en cual es es eprograma (hay tantos...). Pero ya te digo, que lo que quieres hacer es el típico mastermind, pero más simplificado aún.Una idea aproximada de lo que tienes que hacer: - Crear una propiedad que indique el tamaño (númeor de caracteres de la palabra). (esto puede ser una opción en un menú o bien con un control "slider", "scrollhorizontal", etc... siempre entre un rango mínimo y máximo (min=6, Máx=16, por ejemplo). - Crear una función Nuevo: que genere una palabra al azar del tamaño indicado, y guardarla en un campo oculto, convertida en un array de caracteres. - Crear una función Intento (llamada desde un botón y con un texto, que yace sobre un control de texto (textbox, es más que sufieciente, si quieres colorealo, para que sea más 'atractivo'... --- Tu escribes en el texto, en el evento 'change' del textbox, miras si la palaba escrita tiene el largo (ni más ni menos) que se requiere y si es que sí, activas el botón para "Escrutar", si no, sigue desactivado. --- También puedes dejar siempre activo el botón y no hacer nada en eventos del texto, y cuando se pulse el botón, miras si el texto contiene el númeor de caracteres concreto, si no es así, un mensaje al usuario de 'faltan/sobran letras'... el código del botón. --- El botón, invoca la función Intento, pasándole el texto que contiene el control si devuelve false, pegar de nuevo el texto 'Palabra' en el textbox. Y el código de la función lo que hará es: Código: Funcion Intento(byref Palabra as string) as boolean p.d.: Eso sí, antes de todo tú decides si se truncan mayúsculas a inúsculas o viceversa o no... Así : ¿MARTE=MarTE???, y por tanto obra en consecuencia. texto= texto.toupper ó texto= texto.ToLower, o nada si se distingue capitalización de caracteres. Título: Re: [Duda] VB.NET - Comparar dos cadenas de texto y mostrar diferencias Publicado por: Eleкtro en 12 Abril 2017, 19:49 pm Hola.
Si quieres algo sofisticado entonces lee sobre el algoritmo Diff y el problema LCS (Longest Common Subsequence) e implementa el algoritmo. Existen librerías Diff gratuitas para .NET por lo que no tienes que hacer practicamente nada. Aparte, lo que pides se puede interpretar de muchas maneras y se puede implementar de infinitas formas dependiendo de las necesidades del programa, así que como no especifiques un poco más siendo breve y conciso aclarando punto por punto como debería comportarse el algoritmo ante cada situación de coincidencia o no coincidencia pues... vamos mal, jeje. De todas formas te voy a mostrar dos ejemplos que he escrito con los que te puedas hacer una idea de como implementar un algoritmo básico de comparación de cadenas de texto. Ambos ejemplos evaluan las diferencias y usan un RichTextBox para colorear los caracteres que coinciden y los que no, pero ambos ejemplos tienen propósitos distintos para distintos escenarios... pues como ya dije hay infinitas maneras de implementar esto y depende de las necesidades del programa. (http://i.imgur.com/i3BwKy8.gif) El primer ejemplo está enfocado a la evaluación por individual del caracter actual que se haya escrito en el control de edición, esto quiere decir que si modificas otro caracter no se actualizarán las diferencias/colorización del resto de caracteres en el RichTextBox. Código
El segundo ejemplo está enfocado a la evaluación del texto entero; cada vez que se modifique el texto del RichTextBox se actualizarán las diferencias/colorización de todos los caracteres. Este es el código que he usado en la imagen que he compartido arriba. Código
¡Saludos! Título: Re: [Duda] - Tratamiento de dos cadenas y comparacion Publicado por: dont'Exist en 13 Abril 2017, 21:52 pm Muchas gracias a ambos. Me sirvieron de guía, ahora mismo estoy tratando de ajustarlo a lo que necesito... Aunque tambien estuve probando con RichTextbox.Find() y he obtenido resultados parecidos.
Saludos |