2011-08-24 24 views
17

मुझे सी # में @ "स्ट्रिंग्स" का उपयोग करना अच्छा लगता है, खासकर जब मेरे पास बहुत सारे मल्टी-लाइन टेक्स्ट होते हैं। एकमात्र परेशानी यह है कि ऐसा करने पर मेरा कोड स्वरूपण डूडी पर जाता है, क्योंकि मेरी खूबसूरती से स्वरूपित कोड के इंडेंटेशन का उपयोग करने के बजाय दूसरी और अधिक लाइनों को बाईं ओर पूरी तरह से धक्का दिया जाता है। मुझे पता है कि यह डिज़ाइन द्वारा है, लेकिन आउटपुट में वास्तविक टैब/रिक्त स्थान जोड़े बिना, इन लाइनों को इंडेंट करने की इजाजत देने का कुछ विकल्प/हैक तरीका है?सी # में वर्बैटिम स्ट्रिंग्स के लिए मल्टीलाइन फॉर्मेटिंग (0 के साथ उपसर्ग)

जोड़ने उदाहरण:

 var MyString = @" this is 
a multi-line string 
in c#."; 

मेरे चर घोषणा "सही" गहराई पर इंडेंट है, लेकिन स्ट्रिंग में दूसरे और आगे लाइनों छोड़ दिया margin- तो कोड को धक्का दे दिया हो थोड़े बदसूरत है। आप लाइन 2 और 3 की शुरुआत में टैब जोड़ सकते हैं, लेकिन स्ट्रिंग में तब उन टैब शामिल होंगे ... समझ में आता है?

+0

आपको एक उदाहरण देता कर सकते हैं !? – gideon

+1

मैं सामान्य रूप से जो करता हूं वह स्ट्रिंग को अपनी लाइन पर शुरू करता है (यानी '@ 'से पहले की नई लाइन), इसलिए कम से कम यह बाईं ओर अचानक नहीं है। मुझे पता है कि यह एक समाधान नहीं है जिसे आप बाद में कर रहे हैं। –

+0

हां मैं अक्सर यह भी करता हूं। और यह वास्तव में वास्तव में एक बड़ा सौदा नहीं है, लेकिन मैंने सोचा कि यह पूछने के लिए एक दिलचस्प सवाल होगा। –

उत्तर

9

स्ट्रिंग एक्सटेंशन के बारे में कैसे? अपडेट करें: मैंने आपका प्रश्न दोबारा पढ़ा और मुझे आशा है कि एक बेहतर जवाब होगा। यह ऐसा कुछ है जो मुझे भी बग करता है और इसे हल करने के लिए नीचे निराशाजनक है लेकिन प्लस साइड पर यह काम करता है।

using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    public static class StringExtensions 
    { 
     public static string StripLeadingWhitespace(this string s) 
     { 
      Regex r = new Regex(@"^\s+", RegexOptions.Multiline); 
      return r.Replace(s, string.Empty); 
     } 
    } 
} 

और एक उदाहरण सांत्वना कार्यक्रम:

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string x = @"This is a test 
       of the emergency 
       broadcasting system."; 

      Console.WriteLine(x); 

      Console.WriteLine(); 
      Console.WriteLine("---"); 
      Console.WriteLine(); 

      Console.WriteLine(x.StripLeadingWhitespace()); 

      Console.ReadKey(); 
     } 
    } 
} 

और उत्पादन:

This is a test 
       of the emergency 
       broadcasting system. 

--- 

This is a test 
of the emergency 
broadcasting system. 

और एक क्लीनर जिस तरह से यह उपयोग करने के लिए करता है, तो आप इस मार्ग जाने का निर्णय:

string x = @"This is a test 
    of the emergency 
    broadcasting system.".StripLeadingWhitespace(); 
// consider renaming extension to say TrimIndent() or similar if used this way 
+0

हाँ यह एक समाधान है जिसे मैं सोच रहा था। केवल कुछ निश्चित रिक्त स्थान या टैब को पट्टी करने के लिए बुद्धिमत्ता जोड़ने की आवश्यकता हो सकती है, क्योंकि यह संभव है कि आप कुछ लाइनों पर एक स्पेस/टैब चाहते हैं;) –

+0

और शायद जांचें कि स्ट्रिंग किसी भी व्हाइटस्पेस से शुरू होती है और '^ \ s + 'अगर ऐसा है तो व्हाइटस्पेस की मात्रा के साथ? – Cymen

2

मैं ऐसे उत्तर के बारे में नहीं सोच सकता जो आपके प्रश्न को पूरी तरह से संतुष्ट करेगा, हालांकि आप एक ऐसा फ़ंक्शन लिख सकते हैं जो स्ट्रिंग में निहित पाठ की पंक्तियों से प्रमुख रिक्त स्थान को स्ट्रिप करता है और इसे इस तरह की स्ट्रिंग के प्रत्येक निर्माण पर कॉल करता है।

var myString = TrimLeadingSpacesOfLines(@" this is a 
    a multi-line string 
    in c#."); 

हाँ यह एक हैक है, लेकिन आपने अपने प्रश्न में एक हैक की स्वीकृति निर्दिष्ट की है।

+0

पकड़ है- मुझे कुछ परिस्थितियों में कुछ प्रमुख खाली रिक्त स्थान चाहिए, इसलिए मुझे केवल खाली रिक्त स्थान निकालना चाहिए ताकि पाठ बाएं हाशिए पर पहुंच जाए ... समझ में आता है? –

4

साइमेन ने सही समाधान दिया है। मैं स्कैला की स्ट्रिप मार्जिन() विधि से व्युत्पन्न एक समान दृष्टिकोण का उपयोग करता हूं। यहाँ मेरी विस्तार विधि की तरह दिखता है:

public static string StripMargin(this string s) 
{ 
    return Regex.Replace(s, @"[ \t]+\|", string.Empty); 
} 

उपयोग:

var mystring = @" 
     |SELECT 
     | * 
     |FROM 
     | SomeTable 
     |WHERE 
     | SomeColumn IS NOT NULL" 
    .StripMargin(); 

परिणाम:

SELECT 
    * 
FROM 
    SomeTable 
WHERE 
    SomeColumn IS NOT NULL