2009-09-10 26 views
8

Sé que esto puede ser trivial para algunos, pero al programar digamos en C# y tiene una estructura de datos muy grande. Normalmente hago la asignación mediante la ecuación para establecer el valor en el control y luego lo hago de forma inversa.Herramientas para intercambiar ecuaciones en el código

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

inversa:

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

Me preguntaba si hay una herramienta para hacer esto de manera rápida. Esto es suponer que tienes un gran conjunto de valores.

+0

un voto ... Estaba buscando algo similar esta mañana. Estoy esperando una macro VS de algún tipo ... –

Respuesta

16

Puede usar Visual Studio Buscar & Reemplazar para realizar el intercambio. Aquí hay un par de expresiones regulares que llevará a cabo la sustitución automática:

Encontrar: ^{:b*}{([^=]+)} += +{([^=]+)};
Reemplazar: \1\3 = \2;

recuerde a su vez en expresiones regulares. Esto hará exactamente lo que está pidiendo. Esto también se puede encapsular en una macro. Aquí hay un ejemplo de Macro que armé:

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 

... Esto simplemente cambiará las asignaciones en el bloque actual.

+0

Esto es lo que estoy buscando exactamente. Me refiero a la expresión regular. No soy tan bueno verso en expresiones regulares. Quizás puedas explicar el significado de Encontrar lo que hacen cada personaje. Tal vez una breve explicación podría ayudar a la siguiente persona que encontraría esta publicación. – Nap

+1

Absolutamente. Desmenuzaré la sección Buscar y explicaré lo que hace cada uno.^{: b *} dice "Comience por el principio"^"de la línea y capture" {} "cero o más espacios o pestañas" * "": b ". Dado que esta es la primera captura, se almacena en el primer índice "\ 1". Esto se incluyó para preservar la sangría, pero probablemente podría lograr el mismo resultado de otra forma. A continuación, tenemos {([^ =] +)} que dice que coincide uno o más caracteres secuenciales "+" que no son signos iguales "[^ =]" y capturan "{}" la coincidencia. Luego hago coincidir uno o más espacios "+", un signo igual y uno o más espacios "+" nuevamente ... –

+1

.. .El último bloque {([^ =] +)} simplemente funciona de la misma manera para capturar una secuencia secuencial de caracteres que no contienen un signo igual y son seguidos inmediatamente por un punto y coma. La sección Reemplazar simplemente toma las cadenas capturadas " {...} "y los reordena. Lee la expresión de reemplazo como" Capturar uno (sangrado) seguido de capturar tres (segundo identificador en la expresión de asignación original), un signo igual y capturar dos (primer identificador en ori expresión de asignación ginal). –

1

Buen viejo excel viene a rescatar.

Pegue la declaración en la celda A1.

Ir a celda B1 & pasta de esta fórmula -
=MID(A1,1,SEARCH(";",A1) - 1)

Ir a celda C1 & pegar esta fórmula -

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

Pegar cada uno de su declaración en una celda separada.

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

Se basa en la suposición de que la instrucción termina con punto y coma.
Al menos, le proporciona lo que necesita.

+0

¿Cuál es Joel? ¿Quieres decir que obtuve esto de Joelonsoftware? No, lo escribí en Excel y lo probé. No es ciencia espacial de todos modos. – shahkalpesh

+0

Esto sería difícil si ya tiene un programa en C#. Significaría que necesita exportar los datos con espacio como delimitador para importar los datos a excel ... – Nap

8

ReSharper 4.5 lo admite; selecciona las líneas, presiona Alt + Intro y elige Invertir asignaciones.

+0

mientras estoy de acuerdo con los usos de la modificación, esto me recuerda "cuando miras el clavo, querrás tener un martillo" :) – shahkalpesh

+1

Cuando miro Visual Studio, quiero tener ReSharper. ;) – TrueWill

Cuestiones relacionadas