9

アクティブレコードに保存する必要のある適切なサイズのデータ​​セットがあります。ページのフォームフィールドに事前入力するために、私はすでに次のコードを記述しています。

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%は機能しません。これは、型変換(たとえばintstring)が必要になる場合があるためですが、ほとんどの場合、これにより多くの時間を節約できると思います。

4

2 に答える 2

10

これを行うマクロは次のとおりです。

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

基本的に、選択したテキスト (1 行または選択した数の行) を取得し、正規表現を使用して値を交換します。きれいではありませんが、マクロは決してそうではありません。

于 2009-03-13T17:28:17.727 に答える
0

正規表現で動作させることができません(visualstudio 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
于 2012-05-31T13:19:38.107 に答える