none
Obtener caracteres de un Label RRS feed

  • Pregunta

  • Hola.

    En un Label1 esta escrito la cadena "el foro de los lenguajes informaticos".

    Lo que no consigo es, que en otro Label2 se escriba todas las "e" o las "i" o etc. que hay en el Label1.

    Necesito vuestra ayuda para intentar solucionar este problema.

    Gracias.

    domingo, 30 de septiembre de 2012 9:59

Respuestas

  • "RafMand" escribió:

    > Pero solo se escribe una "e"
    >
    > 'Necesito que en el Label Lbl0A se escriba "eee" sin las
    > comillas. Porque el Lbl01 contiene tres "e". Gracias.

    Fíjate como estás escribiendo en el control llamado Lbl0A:

    > Lbl0A.Text = (m.Groups(0).Value)

    De ésta manera, solamente te aparecerá LA ÚLTIMA "e" (sin comillas). Si deseas que te aparezcan las tres "e" (sin comillas), lo que tienes que hacer es CONCATENAR EL CONTENIDO DEL CONTROL LABEL:

    Lbl0A.Text &= (m.Groups(0).Value)

    Esto poco tiene que ver con las expresiones regulares y con querer conocer las vocales "e" que existen en un texto. La concatenación de caracteres son cuestiones elementales, básicas, de programación. ;-)

    > y la posicion donde se encuentra:

    Tal y como estás recorriendo la instrucción While, las posiciones no se encuentran en ningún lado, porque para ello tienes que consultar la propiedad Index de un objeto Group, tal y como así aparece en el ejemplo que te he indicado en mi anterior respuesta.

    Inserta en tu formulario un nuevo control Label llamado Label1, elimina el valor de su propiedad Text, y ejecuta la instrucción While como indico a continuación:

    While m.Success
        Dim g As System.Text.RegularExpressions.Group = m.Groups(0)
        Lbl0A.Text &= g.Value
        ' Obtenemos la posición.
    Label1.Text &= g.Index.ToString() & "; " m = m.NextMatch() End While

    Te advierto que los índices están en base cero, como cualquier otro índice de una colección o array cualquiera, por lo que para el ejemplo indicado, el resultado será las posiciones 1, 7 y 11.


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.



    domingo, 30 de septiembre de 2012 13:57
    Moderador

Todas las respuestas

  • Eso es imposible. Cuando tu pones esta propiedad...

    Label2.Text = Label1.Text

    ... esa propiedad se cumple siempre. Además, ¿me podrías decir como aparecería?

    Salu2.


    domingo, 30 de septiembre de 2012 10:11
  • "RafMand" escribió:

    > Lo que no consigo es, que en otro Label2 se escriba todas
    > las "e" o las "i" o etc. que hay en el Label1.

    ¿Qué significa el etcétera? ¿Cualquier vocal, cualquier consonante, cualquier combinación de vocal y consonante, todas las vocales, todas las consonantes?

    > Necesito vuestra ayuda para intentar solucionar este problema.

    Échale un vistazo al lenguaje de Expresiones regulares de .NET Framework.

    Un saludo


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    domingo, 30 de septiembre de 2012 10:15
    Moderador
  • Es éso SoftJaén. Y gracias por responder.

    Escribir en el label2 todas las coincidencias. Cualquier caracter, previamente establecido, que pueda estar escrito en el Label1.

    No trato de contar las coincidencias.

    domingo, 30 de septiembre de 2012 10:25
  •     Sub DumpHrefs(inputString As String)
            Dim r As Regex
            Dim m As Match
            r = New Regex("href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
            m = r.Match(inputString)
            While m.Success
                Console.WriteLine("Found href " & m.Groups(1).Value & " at " & m.Groups(1).Index.ToString())
                m = m.NextMatch()
            End While
        End Sub
    

    Como adapto la linea:

    r = New Regex("href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    

    ...para que encuentre todas las "e" que hay en el Label1?
    domingo, 30 de septiembre de 2012 10:30
  • "RafMand" preguntó:

    > Como adapto la linea:
    > r = New Regex("href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))",
    > RegexOptions.IgnoreCase Or RegexOptions.Compiled)
    >
    > ...para que encuentre todas las "e" que hay en el Label1?


    Si sólo es para encontrar la la letra "e", sin distinguir entre mayúsculas y minúsculas, la solución es bien fácil:

        Friend Sub BuscarLetra(inputString As String)
    
            Dim r As New Regex("e", RegexOptions.IgnoreCase)
    
            Dim m As Match = r.Match(inputString)
    
            While m.Success
                Console.WriteLine("Encontrada '{0}' en la posición '{1}'", _
                                  m.Groups(0).Value, m.Groups(0).Index)
                m = m.NextMatch()
            End While
    
        End Sub

    Y llamarías al procedimiento:

        BuscarLetra(Label1.Text)

    Entiendo que lo suyo es que le dediques un tiempo a estudiar el lenguaje de expresiones de regulares, porque si el modelo de expresión para encontrar la letra "e" es sencillo, te aseguro que no va a ocurrir lo mismo cuando intentes localizar otra expresión más compleja. ;-)


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    domingo, 30 de septiembre de 2012 11:38
    Moderador
  • Gracias SoftJaén. Pero solo se escribe una "e" y la posicion donde se encuentra:

            Lbl0A.Text = ""
            Lbl01.Text = "Lenguajes de informatica"
            Dim is1 As String = Lbl01.Text
            Dim r As New Regex("e", RegexOptions.IgnoreCase)
            Dim m As Match = r.Match(is1)
            While m.Success
                Lbl0A.Text = (m.Groups(0).Value)
                m = m.NextMatch()
            End While
            'Necesito que en el Label Lbl0A se escriba "eee" sin las comillas. Porque el Lbl01 contiene tres "e".
    Gracias.

    • Editado Rafael F M domingo, 30 de septiembre de 2012 12:20
    domingo, 30 de septiembre de 2012 12:19
  • "RafMand" escribió:

    > Pero solo se escribe una "e"
    >
    > 'Necesito que en el Label Lbl0A se escriba "eee" sin las
    > comillas. Porque el Lbl01 contiene tres "e". Gracias.

    Fíjate como estás escribiendo en el control llamado Lbl0A:

    > Lbl0A.Text = (m.Groups(0).Value)

    De ésta manera, solamente te aparecerá LA ÚLTIMA "e" (sin comillas). Si deseas que te aparezcan las tres "e" (sin comillas), lo que tienes que hacer es CONCATENAR EL CONTENIDO DEL CONTROL LABEL:

    Lbl0A.Text &= (m.Groups(0).Value)

    Esto poco tiene que ver con las expresiones regulares y con querer conocer las vocales "e" que existen en un texto. La concatenación de caracteres son cuestiones elementales, básicas, de programación. ;-)

    > y la posicion donde se encuentra:

    Tal y como estás recorriendo la instrucción While, las posiciones no se encuentran en ningún lado, porque para ello tienes que consultar la propiedad Index de un objeto Group, tal y como así aparece en el ejemplo que te he indicado en mi anterior respuesta.

    Inserta en tu formulario un nuevo control Label llamado Label1, elimina el valor de su propiedad Text, y ejecuta la instrucción While como indico a continuación:

    While m.Success
        Dim g As System.Text.RegularExpressions.Group = m.Groups(0)
        Lbl0A.Text &= g.Value
        ' Obtenemos la posición.
    Label1.Text &= g.Index.ToString() & "; " m = m.NextMatch() End While

    Te advierto que los índices están en base cero, como cualquier otro índice de una colección o array cualquiera, por lo que para el ejemplo indicado, el resultado será las posiciones 1, 7 y 11.


    Enrique Martínez
      [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.



    domingo, 30 de septiembre de 2012 13:57
    Moderador