2009-03-13 5 views
8

私はアクティブなレコードに格納する必要があるデータの適切なサイズのセットを持っています。ページ上のフォームフィールドを事前に移入するためには、私はすでに次のコードを書かれている:方法のいくつかの並べ替えがありますVisual Studioで式のセットの左右を入れ替える方法はありますか?

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... 

このアクティブレコードがカプセル化するデータベース内の列の数がかなり大きいので、このタイピングのほとんどは可能性のように、それはそうです簡単な自動化プロセスで回避されます。

明らかに、タイプ変換(たとえば、intstring)が必要な場合があるため、これは100%機能しませんが、これにより多くの時間を節約できると思います。ここで

答えて

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行またはできるだけ多くの行のいずれか)選択したテキストを取り、値を交換するために、正規表現を使用しています。きれいではありませんが、マクロは決してありません。

+0

ニート! 1行ではなく、テキストブロック全体でそれを実行する方法はありますか? –

+0

これは、選択した数のテキスト行に対して機能します。 –

+0

奇数、私は一度にいくつかを選択すると、最初の行にのみ動作します。 VS2008を使用していますか? –

0

Regex(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 
関連する問題