Есть ли способ поменять местами левую и правую части набора выражений в Visual Studio? - PullRequest
9 голосов
/ 13 марта 2009

У меня есть набор данных приличного размера, который необходимо сохранить в активной записи. Чтобы предварительно заполнить поля формы на странице, я уже написал следующий код:

Device device = new Device(DeviceID); // device is simply the active record

txtDeviceName.Text = device.Name;
txtNotes.Text = device.Notes;
txtHostName.Text = device.Hostname;
txtAssetTag.Text = device.AssetTag;
txtSerialNumber.Text = device.SerialNumber;
// snip... the list goes on!

Существует ли какой-то метод (встроенная функциональность, макрос и т. Д.), Который я мог бы использовать для замены каждой стороны выражения таким образом, чтобы данные сохранялись в активной записи, а не читались из нее по порядку выполнить вставку базы данных? Например, после выделения вышеприведенного кода и запуска макроса он станет:

device.DeviceName = txtDeviceName.Text;
device.Notes = txtNotes.Text;
device.Hostname = txtHostName.Text;
device.AssetTag = txtAssetTag.Text;
device.SerialNumber = txtSerialNumber.Text;
// snip again...

Поскольку число столбцов в базе данных, которое инкапсулирует эта активная запись, довольно велико, кажется, что большей части этой типизации можно было бы избежать с помощью простого автоматизированного процесса.

Очевидно, что это не сработает на 100%, потому что иногда требуется преобразование типов (например, от int до string), но по большей части я думаю, что это сэкономит много времени.

Ответы [ 2 ]

10 голосов
/ 13 марта 2009

Вот макрос, который сделает это:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Text.RegularExpressions

Public Module Helpers
    Sub SwapAssignment()
        If (Not IsNothing(DTE.ActiveDocument)) Then
            Dim selection As TextSelection = CType(DTE.ActiveDocument.Selection, TextSelection)
            selection.Text = Regex.Replace(selection.Text, "([^\s]*)\s*=\s*([^\s]*);", "$2 = $1;")
        End If
    End Sub
End Module

В основном он берет выделенный текст (либо одну строку, либо столько строк, сколько вы выбрали) и использует регулярное выражение для обмена значениями. Не красиво, но тогда макросы никогда не бывают.

0 голосов
/ 31 мая 2012

Невозможно заставить его работать с Regex (должно быть, вещь Visual Studio 2010) Я сделал это по старинке, используя классическое расщепление. Он также включает проверку, чтобы пропустить строки комментариев VB и c #. Размещать его для тех, кому это может понадобиться ..

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.Text.RegularExpressions

Public Module Helpers
    Sub SwapAssignment()
        If (Not IsNothing(DTE.ActiveDocument)) Then
            Dim selection As TextSelection = CType(DTE.ActiveDocument.Selection, TextSelection)
            Dim lineArray() = selection.Text.Split(vbCrLf)
            Dim output = ""
            For Each line As String In lineArray
                line = line.Trim()

                If line.Length >= 1 Then
                    If line.Substring(0, 1).Equals("'") OrElse line.Substring(0, 1).Equals("/") Then
                        output &= line & vbCrLf
                        Continue For
                    End If
                End If

                If line.Contains(" = ") Then
                    Dim splittedline = line.Split("=")
                    output &= splittedline(1) + " = " + splittedline(0) & vbCrLf
                Else
                    output &= line & vbCrLf
                End If
            Next
            Dim check = output
            selection.Text = output
        End If
    End Sub
End Module
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...