none
Una consulta sobre caracteres pegados en un control de texto... RRS feed

  • Pregunta

  • Verán, tengo un archivo de texto que tiene una linea con texto, una linea en blanco y otra linea contexto, algo asi más o menos:

    --------------------------------

    Esta seria la primera linea

    <esta segunda linea estaria en blanco>

    Esta seria la tercera linea

    ---------------------------------------------

    Ocurre que si en el archivo de texto ubico el cursor al comienzo de la a tercera linea y presiono shift y marco digamos 10 caracteres, luego Ctrl+C (copio) y luego voy al control de texto y lo pego resulta que el texto así pegado no tiene 10 sino 11 caracteres de longitud.

    Probando visualizar el contenido del textbox en un msgbox y poniendole un caracter | antes y después del texto para ver dónde empieza y donde acaba exactamente pasa que al inicio se salta a la siguiente linea (como si tuviera un caracter de salto de linea o CR) y por eso la propiedad Text del textbox tiene 11 y no 10 caracteres.

    Es decir se filtra ese caracter invisible inicial. La consulta es cómo hago para que al pegar ese caracter no se pegue también. Extraer una subcadena quitando el caracter inicial no sería una solución porque si pego texto que no esté al principio del archivo de texto entonces me eliminaría un carácter válido.

    jueves, 20 de julio de 2017 22:32

Respuestas

  • If Clipboard.ContainsText Then
    	lisPalabras = Clipboard.GetText.Replace(Environment.NewLine, String.Empty).
    			Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(0)
    End If



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James2016-2 viernes, 21 de julio de 2017 0:36
    jueves, 20 de julio de 2017 23:57

Todas las respuestas

  • Intenta quitar del inicio de la cadena los caracteres \r y \n

    Cadena.TrimStart(New Char() {"\r", "\n"})


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 20 de julio de 2017 23:32
  • Hola, en realidad no pego el texto copiado con Ctrl+C sino con esta línea que me proporcionaste:

    ---------------------------------------

    If Clipboard.ContainsText Then lisPalabras = Clipboard.GetText.Split(New Char() {CChar(" ")}, StringSplitOptions.RemoveEmptyEntries).ToList

    ----------------------------------------

    Me separa las palabras correctamente, pero como explicaba si por ejemplo solo copio una palabra desde el comienzo de la línea y a esta palabra le precede una línea en blanco suele ocurrir que se le pasa un caracter invisible ¿la eliminación de esos caracteres \r \n solo al inicio del texto copiado no se podrían quitar en la misma línea anterior?

    jueves, 20 de julio de 2017 23:39
  • If Clipboard.ContainsText Then
    	lisPalabras = Clipboard.GetText.Replace(Environment.NewLine, String.Empty).
    			Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)(0)
    End If



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James2016-2 viernes, 21 de julio de 2017 0:36
    jueves, 20 de julio de 2017 23:57
  • Me marca error,  me parece que es por el Option Strict que lo tengo activado, no identifico qué conversión hay que hacer:

    viernes, 21 de julio de 2017 0:11
  • Si tienes prendido la directiva Option Strict -que es correcto- puede que haya detectado el intento de una conversión implícita de String a Char por lo que habrá que indicar explicitamente que el separador es un valor de tipo Char.

    Split(New Char() {" "c},

    Por otro lado, ¿de que tipo es la variable 'lisPalabras'?. Por el prefijo del identificador, ¿se trata de una lista?. Si se trata de una lista debes de agregar el elemento a través de su método Add()

    lisPalabras.Add(Clipboard...


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 21 de julio de 2017 0:25
  • Sí, se trata de una lista de elementos de tipo string. Muchas gracias, ahora sí funciona. Me puedes explicar qué hace exactamente? porqué el (0) al final?
    viernes, 21 de julio de 2017 0:36
  • La función Split() divide una cadena en partes que los contiene en un array de tipo String. 0 es el índice del elemento del array que vamos a recuperar, es decir, la primera parte (palabra) de la cadena de caracteres.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 21 de julio de 2017 4:19
  • ok, gracias.
    viernes, 21 de julio de 2017 4:46