2009-03-13 4 views
8

मेरे पास डेटा का एक सभ्य आकार का सेट है जिसे सक्रिय रिकॉर्ड में संग्रहीत करने की आवश्यकता है। आदेश पृष्ठ पर प्रपत्र फ़ील्ड्स prepopulate करने के लिए, मैं पहले से ही निम्नलिखित कोड लिखा है:क्या विजुअल स्टूडियो में अभिव्यक्तियों के सेट के बाएं और दाहिने हाथों को स्वैप करने का कोई तरीका है?

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) लेकिन अधिकांश भाग के लिए मुझे लगता है कि यह बहुत समय बचाएगा।

उत्तर

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 

मूल रूप से यह चयनित पाठ लेता है और मूल्यों स्वैप करने के लिए एक नियमित अभिव्यक्ति का उपयोग करता है। सुंदर नहीं है लेकिन फिर मैक्रोज़ कभी नहीं हैं।

+0

साफ! क्या टेक्स्ट के पूरे ब्लॉक पर इसे केवल एक लाइन के विपरीत करने का कोई तरीका है? –

+0

यह आपके द्वारा चुने गए पाठ की कई पंक्तियों के लिए काम करेगा। –

+0

विषम, यह केवल पहली पंक्ति के लिए काम करता है जब मैं कई बार कई चुनता हूं। क्या आप वीएस -2008 का उपयोग कर रहे हैं? –

0

रेगेक्स के साथ काम करने में असमर्थ (विज़ुअलस्टूडियो 2010 चीज होना चाहिए) मैंने इसे क्लासिक विभाजन का उपयोग करके पुराना फैशन तरीका किया है। इसमें वीबी और सी # टिप्पणी लाइनों को छोड़ने के लिए एक चेक भी शामिल है। इसे किसी भी व्यक्ति के लिए पोस्ट करने की आवश्यकता है ..

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 
संबंधित मुद्दे

 संबंधित मुद्दे