VB.NET में मल्टीलाइन स्ट्रिंग्स


144

क्या पाइथन जैसे वीबी.नेट में मल्टीलाइन स्ट्रिंग्स होने का कोई तरीका है

a = """
multi
line
string
"""

या PHP?

$a = <<<END
multi
line
string
END;

बेशक कुछ ऐसा है जो नहीं है

"multi" & _
"line

1
BTW: '"मल्टी" और _ <newline> "लाइन"' एक स्ट्रिंग शाब्दिक है, दो नहीं। यह अभी भी बदसूरत है, हालांकि।
जोएल कोएहॉर्न

C # के लिए, कोड
लिटरल्स

मेरे दो सेंट: वीएस 2017 में आपका VB.NET कोड संकलित किया जाएगा।
atИ ᗩ ᗩ

जवाबों:


223

आप एक समान प्रभाव प्राप्त करने के लिए XML लिटरल्स का उपयोग कर सकते हैं :

Imports System.XML
Imports System.XML.Linq
Imports System.Core

Dim s As String = <a>Hello
World</a>.Value

याद रखें कि यदि आपके पास विशेष वर्ण हैं, तो आपको एक CDATA ब्लॉक का उपयोग करना चाहिए:

Dim s As String = <![CDATA[Hello
World & Space]]>.Value

2015 अद्यतन:

मल्टी-लाइन स्ट्रिंग शाब्दिक विज़ुअल बेसिक 14 ( विज़ुअल स्टूडियो 2015 में ) पेश किए गए थे । उपरोक्त उदाहरण अब इस प्रकार लिखा जा सकता है:

Dim s As String = "Hello
World & Space"

MSDN article isn't updated yet (as of 2015-08-01), so check some answers below for details.

विवरण रोसलिन न्यू-लैंग्वेज-फीचर्स-इन-वीबी -14 जीथब रिपॉजिटरी में जोड़े जाते हैं ।


आप वहां चर परिवर्तन कैसे कर सकते हैं? जैसे "a =" और someint & ","
क्रिस्टोफर महान

1
@ क्रिस्‍टोफर - मुझे आमतौर पर स्ट्रिंग में स्थिर टोकन रखने के लिए अधिक पठनीय लगता है, और फिर उन्हें बदलें। तो s="... a=~someint~ ..."और फिर s=s.Replace("~someint~', SomeInt)
हर्ब कॉडिल

यह गतिशील संकलन के साथ काम करने के लिए प्रकट नहीं होता है: CodeDomProvider.CreateProvider ("VisualBic")। CompileAssemblyFromFile (<विकल्प>, <.vb फ़ाइल ऊपर दी गई ट्रिक सिंटैक्स के साथ>> ... कोई विचार? यह सिर्फ वीएस 2010 सिंटैक्टिक चीनी है?
चाड

1
@romkyns सच नहीं है, मुझे पता चला कि सीडीएटीए का उपयोग कैसे किया जाता है और फिर भी <% =%> का उपयोग करके एम्बेड करने में सक्षम हो सकता है
नेल्सन

1
बहुत बढ़िया! आप नए सिंटैक्स के तहत शाब्दिक में इसे शुरू किए बिना कोड इंडेंटेशन कैसे बनाए रखते हैं?
पेंज़रक्रिसिस

50

VB.Net में ऐसी कोई सुविधा नहीं है और यह विज़ुअल स्टूडियो 2010 में नहीं आएगा। जिरविन जिस सुविधा का उल्लेख कर रहा है, उसे अंतर्निहित लाइन निरंतरता कहा जाता है। यह बहु-पंक्ति कथन या अभिव्यक्ति से _ को हटाने के साथ करना है। यह _ के साथ एक बहुस्तरीय स्ट्रिंग को समाप्त करने की आवश्यकता को दूर करता है लेकिन वीबी में अभी भी कोई बहु-पंक्ति स्ट्रिंग शाब्दिक नहीं है।

मल्टीलाइन स्ट्रिंग के लिए उदाहरण

विजुअल स्टूडियो 2008

Dim x = "line1" & vbCrlf & _
        "line2"

विजुअल स्टूडियो 2010

Dim x = "line1" & vbCrlf & 
        "line2"

तो फिर यह XML शाब्दिक के लिए कैसे काम करता है? या तो यह संभव है, या एक्सएमएल शाब्दिक एक अलग तकनीक का उपयोग कर रहे हैं - और यदि एक अलग तकनीक है, तो एक जिसे मल्टी-लाइन स्ट्रिंग्स तक बढ़ाया जा सकता है।
मेलमोकब

1
@mellamokb XML शाब्दिक हैं .. एक बेहतर शब्द की कमी के लिए विशेष। संकलक उन्हें समझता है और इसलिए उन्हें कई लाइनों को निहित करने की अनुमति देगा। मल्टी-लाइन स्ट्रिंग्स के लिए ऐसा कोई समर्थन नहीं जोड़ा गया था। इस तरह के समर्थन को जोड़ना एक्सएमएल शाब्दिकों की तुलना में बहुत आसान है, यह सिर्फ उस रिलीज के लिए बार को पूरा नहीं करता है।
JaredPar

38

मैंने इस संस्करण का उपयोग किया:

     Dim query As String = <![CDATA[
        SELECT 
            a.QuestionID
        FROM 
            CR_Answers a

        INNER JOIN 
            CR_Class c ON c.ClassID = a.ClassID
        INNER JOIN
            CR_Questions q ON q.QuestionID = a.QuestionID
        WHERE 
            a.CourseID = 1
        AND 
            c.ActionPlan = 1
        AND q.Q_Year = '11/12'
        AND q.Q_Term <= (SELECT CurrentTerm FROM CR_Current_Term)
    ]]>.Value()

यह स्ट्रिंग में <> की अनुमति देता है


1
महान तकनीक, लेकिन किसी को इसे काम करने के लिए अपनी परियोजना में कुछ संदर्भ जोड़ना पड़ सकता है। देखें: msdn.microsoft.com/en-us/library/bb531455%28v=vs.90%29.aspx और stackoverflow.com/a/28654126/3175562
माइक

30

Visual Studio 2015 के बाद से मल्टी-लाइन स्ट्रिंग्स उपलब्ध हैं।

Dim sql As String = "
    SELECT ID, Description
    FROM inventory
    ORDER BY DateAdded
"

उपयोगिता को अधिकतम करने के लिए आप उन्हें स्ट्रिंग प्रक्षेप के साथ जोड़ सकते हैं :

Dim primaryKey As String = "ID"
Dim inventoryTable As String = "inventory"

Dim sql As String = $"
    SELECT {primaryKey}, Description
    FROM {inventoryTable}
    ORDER BY DateAdded
"

ध्यान दें कि प्रक्षेपित तार के साथ शुरू होता है $और आपको ध्यान रखने की आवश्यकता होती है ", {और }अंदर समाहित होता है - उन्हें रूपांतरित करें "", {{या}} क्रमशः।

यहाँ आप उपरोक्त कोड उदाहरण के प्रक्षेपित भागों के वास्तविक वाक्यविन्यास पर प्रकाश डाल सकते हैं :

यहां छवि विवरण दर्ज करें

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


20

मल्टीलाइन स्ट्रिंग शाब्दिक विज़ुअल बेसिक 14.0 में पेश किए गए हैं - https://roslyn.codeplex.com/discussions/571884

आप तब VS2015 पूर्वावलोकन में उपयोग कर सकते हैं, अभी बाहर - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (ध्यान दें कि आप अभी भी VS2015 का उपयोग तब भी कर सकते हैं, जब आप किसी पुराने को लक्षित कर रहे हों .NET फ्रेमवर्क का संस्करण)

Dim multiline = "multi
line
string"

VB स्ट्रिंग्स मूल रूप से अब C # वर्बटीम स्ट्रिंग्स के समान हैं - वे \ n जैसे बैकस्लैश एस्केप सीक्वेंस का समर्थन नहीं करते हैं, और वे स्ट्रिंग के भीतर नईलाइन्स की अनुमति देते हैं, और आप डबल-कोट्स के साथ कोट्स सिंबल से बच जाते हैं ""


2
वीबी में मल्टी-लाइन स्ट्रिंग्स को जोड़ने के लिए लुकियन को धन्यवाद। शायद आप अपना जवाब अपडेट कर सकते हैं, क्योंकि वीएस 2015 अब आरटीएम है। और शायद आप संबंधित अद्यतन करने के लिए अपनी कंपनी में किसी को भी प्रहार कर सकते हैं MSDN लेख
miroxlav

14

यह मेरे लिए एक बहुत उपयोगी लेख था, लेकिन कोई भी उल्लेख किया है कि कैसे करने के लिए CONCATENATE मामले में आप कुछ चर भेजने के लिए जो आप समय के 99% क्या करने की जरूरत है चाहता हूँ।

... <% = चर %> ...

यहाँ आप इसे कैसे करते हैं:

<SQL> SELECT * FROM MyTable WHERE FirstName='<%= EnteredName %>' </SQL>.Value


17
इस स्थिति में, आप समवर्ती से बचना चाहते हैं और इसके बजाय SQL मापदंडों का उपयोग करें क्योंकि वे SQL इंजेक्शन के हमलों के खिलाफ सख्त हैं। मैं इसे गतिशील SQL पीढ़ी के लिए उपयोगी होते हुए भी देख सकता हूं, हालांकि (उपयोगकर्ता इनपुट के साथ पारित किए बिना)।
चाड लेवी

10

खैर, जब से आप अपने अजगर पर लग रहे हैं, क्या मैं आपको सुझाव दूंगा कि आप अपने पाठ को अजगर में कॉपी करें, जैसे:

 s="""this is gonna 
last quite a 
few lines"""

तो एक करो:

  for i in s.split('\n'):
    print 'mySB.AppendLine("%s")' % i

#    mySB.AppendLine("this is gonna")
#    mySB.AppendLine("last quite a")
#    mySB.AppendLine("few lines")

या

  print ' & _ \n'.join(map(lambda s: '"%s"' % s, s.split('\n')))

#    "this is gonna" & _ 
#    "last quite a" & _ 
#    "few lines"

फिर कम से कम आप इसे बाहर कॉपी कर सकते हैं और अपने वीबी कोड में डाल सकते हैं। बोनस अंक यदि आप एक हॉटकी (सबसे तेज़: ऑटोहोटकी के साथ पाने के लिए) बाँधते हैं , तो आपके पेस्ट बफर में जो कुछ भी है उसके लिए ऐसा करने के लिए। एक ही विचार SQL फ़ॉर्मेटर के लिए अच्छी तरह से काम करता है।


8

XElement वर्ग का उपयोग करके vb.net में बहु-पंक्ति स्ट्रिंग शाब्दिक।

Imports System.Xml.Linq

Public Sub Test()

dim sOderBy as string = ""

dim xe as XElement = <SQL>
                SELECT * FROM <%= sTableName %>
                 <ORDER_BY> ORDER BY <%= sOrderBy %></ORDER_BY>
                 </SQL>

'** conditionally remove a section 
if sOrderBy.Length = 0 then xe.<ORDER BY>.Remove

'** convert XElement value to a string 
dim sSQL as String = xe.Value

End Sub

7

मेरे लिए जो एक भाषा के रूप में वीबी के बारे में सबसे अधिक कष्टप्रद बात है। सच में, मैं एक बार एक फ़ाइल में स्ट्रिंग लिखा था और की तर्ज पर कुछ लिखा था:

Dim s as String = file_get_contents("filename.txt")

अगर मुझे आवश्यकता है तो बस मैं सीधे SQL सर्वर पर क्वेरी का परीक्षण कर सकता हूं।

मेरी वर्तमान विधि SQL सर्वर पर एक संग्रहीत कार्यविधि का उपयोग करने के लिए है और बस कॉल करता हूं ताकि मैं पैरामीटर में क्वेरी, आदि को पास कर सकूं


5

मुझे पता चला कि दोनों का उपयोग कैसे करना है <! [CDATA [के साथ <% = चर के लिए, जो आपको बिना किसी चिंता के कोड करने की अनुमति देता है।

आपको मूल रूप से सीडीबी टैग को वीबी चर से पहले समाप्त करना होगा और फिर इसे फिर से जोड़ना होगा ताकि सीडीएटी वीबी कोड पर कब्जा न करे। आपको एक टैग में पूरे कोड ब्लॉक को लपेटने की आवश्यकता है क्योंकि आपके पास कई सीडीएटीए ब्लॉक होंगे।

Dim script As String = <code><![CDATA[
  <script type="text/javascript">
    var URL = ']]><%= domain %><![CDATA[/mypage.html';
  </script>]]>
</code>.value

3

आप स्ट्रिंग को संसाधन-फ़ाइल (जैसे "मेरा प्रोजेक्ट" / संसाधन) में डाल सकते हैं और फिर इसे प्राप्त कर सकते हैं

 Dim a = My.Resources.Whatever_you_chose

3

डिस्क्लेमर: मुझे अजगर से प्यार है। यह मल्टी-लाइन स्ट्रिंग्स केवल एक कारण है।

लेकिन मैं VB.Net भी करता हूं, इसलिए यहां अधिक पठनीय लंबे तार के लिए मेरा शॉर्ट-कट है।

  Dim lines As String() = {
    "Line 1",
    "Line 2",
    "Line 3"
  }
  Dim s As String = Join(lines, vbCrLf)

1
आपको प्रत्येक "लाइन .." के लिए पंक्ति के अंत में _ की आवश्यकता है जो कि बदसूरत दिखता है।
केनजी नोगुची

2
वास्तव में तुम नहीं। VB (2010 और बाद में मुझे लगता है?) के बाद के संस्करणों को बहुत सारे मामलों में _ की आवश्यकता नहीं है, जिसमें यहां दिखाया गया उदाहरण भी शामिल है।
डैरिल


1

दृश्य स्टूडियो 2010 (VB NET) में मैं निम्नलिखित कोशिश करता हूं और ठीक काम करता हूं

Dim HtmlSample As String = <anything>what ever you want to type here with multiline strings</anything>

dim Test1 as string =<a>onother multiline example</a>

1

विजुअल बेसिक 14 में विजुअल स्टूडियो 2015 के भाग के रूप में उपलब्ध है। https://msdn.microsoft.com/en-us/magazine/dn890368.aspx

लेकिन अभी तक R # द्वारा समर्थित नहीं है। अच्छी खबर यह है कि जल्द ही उनका समर्थन किया जाएगा! JetBrains को सूचित करने के लिए कृपया Youtrack पर वोट करें, जिनकी आपको आवश्यकता है।


0

यदि आपको लाइन कोड चर के साथ VB.Net में XML शाब्दिक की आवश्यकता है, तो यह है कि आप इसे कैसे करेंगे:

<Tag><%= New XCData(T.Property) %></Tag>

ध्यान दें कि आप यहाँ XML शाब्दिक का उल्लेख क्यों कर रहे हैं, मूल प्रश्न में उल्लेखित XML नहीं देखें।
केमेक्सनर

0

आप System.Text.StringBuilderइस तरह से क्लास का उपयोग कर सकते हैं :

Dim sValue As New System.Text.StringBuilder
sValue.AppendLine("1st Line")
sValue.AppendLine("2nd Line")
sValue.AppendLine("3rd Line")

तो आप का उपयोग कर बहुस्तरीय स्ट्रिंग प्राप्त करें:

sValue.ToString()

-1

चूंकि यह एक पठनीयता का मुद्दा है, इसलिए मैंने निम्नलिखित कोड का उपयोग किया है:

MySql = ""
MySql = MySql & "SELECT myTable.id"
MySql = MySql & " FROM myTable"
MySql = MySql & " WHERE myTable.id_equipment = " & lblId.Text

1
ये गलत है। आपने बस स्ट्रिंग के 4 उदाहरण बनाए
TS

मुझे विरासत में मिला VB6 कोड मुझे VB.NET में पोर्ट करना है जो इनमें से भरा हुआ है! :( इस मामले में मैं पठनीयता बनाए रखने के लिए प्रदर्शन का त्याग करना पसंद करता हूं।
Zac

आपको नहीं करना है। आप हमेशा उन लाइनों के भीतर एक चर, और प्रारूप को फिर से असाइन किए बिना संक्षिप्त कर सकते हैं
टीएस

मेरे मामले में सही सिंटैक्स पर स्विच करने के लिए लागू नहीं है क्योंकि मुझे कोड का एक पूरा गुच्छा संशोधित करना चाहिए और परियोजना पर कोई समय नहीं बचा है।
Zac

-1

का प्रयोग करें vbCrLfया vbNewLine। यह मैसेजबॉक्स और कई अन्य नियंत्रणों के साथ काम करता है जिन्हें मैंने परीक्षण किया था।

Dim str As String
str = "First line" & vbCrLf & "Second line"
MsgBox(str)
str = "First line" & vbNewLine & "Second line"
MsgBox(str)

यह 2 लाइनों के साथ दो समान मैसेजबॉक्स दिखाएगा।


-9

नहीं, VB.NET के पास ऐसी कोई सुविधा नहीं है। यह VB के अगले पुनरावृत्ति में उपलब्ध होगा (विजुअल बेसिक 10) हालाँकि ( लिंक )


पक्की बात? मुझे पता है कि वे मल्टीलाइन स्टेटमेंट्स की अनुमति देने वाले हैं, लेकिन क्या वे मल्टीलाइन स्ट्रिंग्स को भी अनुमति देने वाले हैं? मेरा मतलब है "हैलो <newline> दुनिया"?
मेहरदाद अफश्री

1
लाइन निरंतरता चरित्र को हटाने और मल्टी-लाइन शाब्दिक तार अलग-अलग विशेषताएं हैं।
JaredPar

-16

अगर यह C # की तरह है (मेरे पास VB.Net स्थापित नहीं है) तो आप @ के साथ एक स्ट्रिंग उपसर्ग कर सकते हैं

foo = @"Multiline
String"

यह @ "C: \ Windows \ System32 \" जैसी चीजों के लिए भी उपयोगी है - यह अनिवार्य रूप से बच निकलता है और मल्टीलाइन पर मुड़ता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.