MACRO EXTRACCION VISUAL STUDIO

Pego esta macro de extración para el visual studio que he creado.

Sirve para extraer de un documento todo el texto que cumpla una expresión regular dada.

La uso para obtener de un aspx todos los ids de los controles.

La maro, busca en el documento las concidencias con la expresión regular y pega en la ventana de Output el texto correspondiente al primer grupo dentro de la expresión regular.

Expresiones regulares propuestas:

Si queremos obtener todos los controles que tengan id: id="([a-zA-Z0-9_]+)"

Para los controles con id que comienze por txt: id="(txt[a-zA-Z0-9_]+)"

Que comienze por lbl : id="(lbl[a-zA-Z0-9_]+)"

 

Sub ExtraerIDS()
        ' Obtener referencia a la ventana de Output
        Dim win As Window = _
          DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
        Dim ow As OutputWindow = win.Object
        Dim owPane As OutputWindowPane
        owPane = ow.OutputWindowPanes.Item("General")

        ' Activar y limpiar la ventana de Output
        owPane.Activate()
        owPane.Clear()

        ' Activar la ventana del documento activo
        DTE.ActiveDocument().Activate()

        ' Mover el cursor al principio del documento
        DTE.ActiveDocument.Selection.StartOfDocument()

        ' Obtener Parámetros de búsqueda
        Dim searchRegExpr As String = "id=""([a-zA-Z0-9_]+)"""
        searchRegExpr = InputBox("Expresión de Búsqueda", "Extraer IDS", searchRegExpr)

        ' Establcer parámetros de búsqueda
        DTE.Find.FindWhat = searchRegExpr
        DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
        DTE.Find.MatchCase = False
        DTE.Find.MatchWholeWord = False
        DTE.Find.MatchInHiddenText = True
        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
        DTE.Find.Action = vsFindAction.vsFindActionFind
        DTE.Find.Backwards = False

        ' Ultima línea encontrada. La usamos para no buscar varias veces por el documento
        ' ya que la búsqueda no se detiene al final, sino que vuelve al principio
        ' y sigue buscando
        Dim lastFoundLine As Integer = -1

        ' Inicializar expresión regular
        Dim re As New System.Text.RegularExpressions.Regex(searchRegExpr, Text.RegularExpressions.RegexOptions.IgnoreCase)

        ' Bucle de Búsqueda
        While DTE.Find.Execute() = vsFindResult.vsFindResultFound And DTE.ActiveDocument.Selection.TopPoint.Line >= lastFoundLine
            ' Texto que mostraremos en el panel Output
            Dim textToShow As String = DTE.ActiveDocument.Selection.Text
            ' Buscamos los grupos dentro de la expresión regular
            Dim match As Text.RegularExpressions.Match = (re.Match(textToShow, searchRegExpr, Text.RegularExpressions.RegexOptions.IgnoreCase))

            ' Si hay algún grupo dentro de la expresión regular
            If match.Groups.Count > 0 Then
                textToShow = match.Groups(1).Value
            Else
                textToShow = match.Groups(0).Value
            End If

            ' Si hay algo que mostrar
            If textToShow.Length > 0 Then
                owPane.OutputString(textToShow & vbCrLf)
            End If

            ' Comprobamos que hayamos llegado al final del documento.
            lastFoundLine = DTE.ActiveDocument.Selection.TopPoint.Line
        End While

        MsgBox("End!")
    End Sub
Filed under: ,

Comments

No Comments