2009-09-10 8 views
8

これはいくつかのことには些細なことかもしれませんが、プログラミングではC#で、非常に大きなデータ構造を持っています。私は通常、コントロールの値を設定するための方程式を使って割り当てを行い、後でそれを逆の方法で行います。コード内の方程式を交換するツール

Control1.Text = data.value1; 
Control2.SelectedValue = data.value2; 

リバース:

data.value1 = Control1.Text; 
data.value2 = Control2.SelectedValue; 

早くこれを行うためのツールがあれば、私は思っていました。これは、非常に大きな値のセットがあることを前提としています。

+0

up one vote ...私は今朝同様のものを探していました。私は何らかの種類のVSマクロを望んでいます... –

答えて

16

Visual Studio Find & Replaceを使用すると、スワップを実行できます。ここでは、自動的に交換を行います正規表現のペアがあります:

検索:^{:b*}{([^=]+)} += +{([^=]+)};
置き換え:\1\3 = \2;

は、正規表現をオンにすることを忘れないでください。これはあなたが求めているものとまったく同じです。これはマクロにカプセル化することもできます。

Sub SwapAssignments() 
    DTE.Find.Action = vsFindAction.vsFindActionReplaceAll 
    DTE.Find.FindWhat = "^{:b*}{([^=]+)} += +{([^=]+)};" 
    DTE.Find.ReplaceWith = "\1\3 = \2;" 
    DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocumentFunction 
    DTE.Find.MatchCase = False 
    DTE.Find.MatchWholeWord = False 
    DTE.Find.MatchInHiddenText = True 
    DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr 
    DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone 
    If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then 
     Throw New System.Exception("vsFindResultNotFound") 
    End If 
    DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close() 
End Sub 

...これは、単に現在のブロック内の割り当てを入れ替えるだけです。別の例として、それをインストールする方法について説明:あまりにもこの発見

+0

これは私が探しているものです。私は正規表現を意味する。私は正規表現ではうまくいきません。たぶんあなたは、各文字が何をするかを見つけることの意味を説明することができます。たぶん簡単な説明は、この投稿を見つける次の人を助けることができます。 – Nap

+1

絶対に。 Findセクションを分割して、それぞれが何をするかを説明します。^{:b *}は "行の先頭"^"から始まり、" {} "ゼロ以上の" * "スペースまたはタブ":b "をキャプチャします。これが最初のキャプチャなので、最初のインデックス "\ 1"。これはインデントを保持するために含まれていましたが、同じ結果を他の方法で達成できる可能性があります。 "+"、等号、そして1つ以上のスペース "+"を再度一致させます。 –

+1

..最後のブロック{([^ =] +)};は等号を含まない連続した文字列をキャプチャするのと同じ方法で動作し、直後にセミコロンが続きます。置換セクションでは、 (元の代入式の2番目の識別子)、等号、2つのキャプチャ(oriの最初の識別子)ジナル代入式)。 –

1

古きよき才能が救われます。

セルA1にステートメントを貼り付けます。

後藤電池B1 &は、この数式を貼り付ける -
=MID(A1,1,SEARCH(";",A1) - 1)

後藤セルC1 &この数式を貼り付ける -

=CONCATENATE(TRIM(MID(B1,SEARCH("=",B1)+1, 100)), 
    " = ", 
    TRIM(LEFT(B1,SEARCH("=",B1)-1)), 
    ";") 

別々のセルにあなたの文のそれぞれを貼り付けます。

cell A1: textBox1.Value = textBox2.Value; 
cell A2: textBox2.Value = textBox4.Value; 

ステートメントがセミコロンで終わることが前提です。
少なくとも、必要なものを手に入れます。

+0

whats Joel?私はJoelonsoftwareからこれを得たということですか?いいえ、私はそれをExcelで書いてテストしました。とにかくロケット科学ではありません。 – shahkalpesh

+0

プログラムが既にC#にある場合、これは難しいでしょう。それはあなたがデータをExcelにインポートする区切り記号としてスペースでデータをエクスポートする必要があることを意味する... – Nap

8

ReSharper 4.5これをサポートします。線を選択し、Alt + Enterキーを押して、[割り当てを逆転]を選択します。

+0

私はresharperの使用に同意しますが、これは "あなたが爪を見ると、あなたはハンマーを持っていたいと思うでしょう"と私に思い出させます:) – shahkalpesh

+1

Visual Studioを見るとReSharperが必要です。 ;) – TrueWill