ভিবি.এনইটি তে একাধিক স্ট্রিং


144

পাইথনের মতো ভিবি.এনইটি তে মাল্টলাইন স্ট্রিং থাকার কোনও উপায় আছে কি?

a = """
multi
line
string
"""

বা পিএইচপি?

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

অবশ্যই কিছু না

"multi" & _
"line

1
বিটিডব্লিউ: '"মাল্টি" & _ <নিউলাইন> "লাইন"' একটি স্ট্রিং আক্ষরিক, দুটি নয়। যদিও এটি এখনও কুরুচিপূর্ণ।
জোল কোহোর্ন 16


আমার দুটি সেন্ট: ভিএস 2017 এ আপনার ভিবি.এনইটি কোড সংকলিত হবে।
4 Ꭰ ЯƎᗩ

উত্তর:


222

অনুরূপ প্রভাব অর্জন করতে আপনি এক্সএমএল লিটারালগুলি ব্যবহার করতে পারেন :

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

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

মনে রাখবেন যে আপনার যদি বিশেষ অক্ষর থাকে তবে আপনার সিডিএটি ব্লক ব্যবহার করা উচিত:

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.

বিস্তারিত যোগ করা হয় Roslyn নিউ ভাষার-বৈশিষ্ট্য-ইন-ভিবি-14 গিটহাব সংগ্রহস্থল।


আপনি কিভাবে সেখানে পরিবর্তনশীল প্রতিস্থাপন করতে পারেন? "a =" এবং সামিট & ","
ক্রিস্টোফার মহান

1
@ ক্রিস্টোফার - আমি সাধারণত স্ট্রিং ধ্রুবকটিতে টোকেন রাখা এবং তারপরে প্রতিস্থাপন করা আরও পঠনযোগ্য বলে মনে করি। সুতরাং s="... a=~someint~ ..."এবং তারপর s=s.Replace("~someint~', SomeInt)
হার্ব কডিল

এটি গতিশীল সংকলনের সাথে কাজ করে না বলে মনে হচ্ছে: কোডডমপ্রোভাডার.ক্রিয়েটপ্রোভিডার ("ভিজ্যুয়াল বেসিক") Comp এটি কি কেবল ভিএস ২০১০ সিনট্যাকটিক চিনি?
চাদ

1
@ ক্রিমিনস সত্য নয়, আমি সিডিএটিএ কীভাবে ব্যবহার করব এবং এখনও <% =%> ব্যবহার করে এম্বেড করতে সক্ষম হলাম তা এখানে
নেলসন

1
অসাধারণ! নতুন সিনট্যাক্সের আওতায় আপনি আক্ষরিক মধ্যে কোড প্রবর্তন না করে কীভাবে কোড ইন্ডেন্টেশন বজায় রাখবেন?
Panzercrisis

50

VB.Net ধরনের কোনো বৈশিষ্ট্য আছে এবং এটি হবে না ভিসুয়াল স্টুডিও 2010 বৈশিষ্ট্য যা jirwin উল্লেখ করা হয় অন্তর্নিহিত লাইন ধারাবাহিকতা বলা হয় আসছে করা। এটি একটি বহু-লাইন বিবৃতি বা অভিব্যক্তি থেকে _ অপসারণের সাথে সম্পর্কিত। এটি _ দিয়ে মাল্টলাইন স্ট্রিংটি বন্ধ করার প্রয়োজনটিকে সরিয়ে দেয় তবে ভিবিতে এখনও কোনও মাল্ট-লাইন স্ট্রিং নেই।

মাল্টলাইন স্ট্রিং জন্য উদাহরণ

ভিজ্যুয়াল স্টুডিও 2008

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

ভিজ্যুয়াল স্টুডিও 2010

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

তাহলে এটি এক্সএমএল আক্ষরিক জন্য কীভাবে কাজ করে? হয় এটি সম্ভব, বা এক্সএমএল আক্ষরিকরা একটি আলাদা কৌশল ব্যবহার করছে - এবং যদি অন্য কোনও প্রযুক্তি হয়, তবে এমন একটি যা মাল্টি-লাইন স্ট্রিংগুলিতে প্রসারিত হতে পারে।
মেল্লামব্যাক

1
@ মেল্লামোকব এক্সএমএল আক্ষরিক হয় .. আরও ভাল শব্দের অভাবের জন্য বিশেষ। সংকলক তাদের বোঝে এবং সেহেতু এগুলি স্পষ্টভাবে একাধিক লাইন বিস্তারে অনুমতি দেবে। মাল্টি-লাইন স্ট্রিংয়ের জন্য এই জাতীয় সমর্থন যোগ করা হয়নি। এক্সএমএল আক্ষরিকের তুলনায় এই জাতীয় সমর্থন যুক্ত করা আরও সহজ, এটি কেবলমাত্র এই প্রকাশের জন্য বারটি পূরণ করে নি।
জারেডপাড়

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
দুর্দান্ত কৌশল, তবে এটির কাজটি চালিয়ে যাওয়ার জন্য আপনার প্রকল্পের জন্য কিছু উল্লেখ যুক্ত থাকতে পারে। দেখুন: এমএসডিএন.মাইক্রোসফটকম /en-us/library/bb531455%28v=vs.90%29.aspx এবং স্ট্যাকওভারফ্লো.
মাইক 14

30

মাল্টি-লাইন স্ট্রিংগুলি ভিজ্যুয়াল স্টুডিও 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/discussion/571884 এ

আপনি এখন VS2015 পূর্বরূপে ব্যবহার করতে পারেন, এখনই - http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (নোট করুন যে কোনও বয়স্ককে লক্ষ্য করার পরেও আপনি এখনও VS2015 ব্যবহার করতে পারেন .NET ফ্রেমওয়ার্কের সংস্করণ)

Dim multiline = "multi
line
string"

ভিবি স্ট্রিংগুলি মূলত এখন সি # ভারব্যাটিম স্ট্রিংয়ের সমান - তারা \ n এর মতো ব্যাকস্ল্যাশ এস্কেপ সিকোয়েন্সগুলিকে সমর্থন করে না এবং তারা স্ট্রিংয়ের মধ্যে নতুন লাইনের অনুমতি দেয় এবং আপনি ডাবল-কোটস সহ উদ্ধৃতি চিহ্নটি এড়ান ""


2
ভিবিতে মাল্টি-লাইন স্ট্রিং যুক্ত করার জন্য লুসিয়ানকে ধন্যবাদ। হতে পারে আপনি নিজের উত্তর আপডেট করতে পারেন, কারণ ভিএস 2015 এখন আরটিএম। এবং আপনি সম্পর্কিত এমএসডিএন নিবন্ধটি আপডেট করতে আপনি আপনার সংস্থার কাউকে ডেকে দিতে পারেন ।
মিরোক্লাভ

14

এটি আমার জন্য একটি সত্যই সহায়ক নিবন্ধ, তবে কীভাবে সংঘবদ্ধ করা যায় তা কেউ উল্লেখ করেনি কিছু ভেরিয়েবল প্রেরণ করতে চাইলে করেনি, যা আপনাকে 99% সময়ের প্রয়োজন।

... <% = পরিবর্তনশীল %> ...

আপনি এটি কীভাবে করেন তা এখানে:

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


17
এই ক্ষেত্রে, আপনি সংলগ্নতা এড়াতে এবং পরিবর্তে এসকিউএল প্যারামিটারগুলি ব্যবহার করতে চান কারণ এসকিউএল ইনজেকশন আক্রমণগুলির বিরুদ্ধে কঠোর হতে তারা আরও ভাল। আমি এটি ব্যবহারকারীর এসকিউএল জেনারেশনের জন্য দরকারী হিসাবে দেখতে পাচ্ছি, যদিও (ব্যবহারকারীর ইনপুটটি পাশ না করে)।
চাদ লেভি

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"

তাহলে কমপক্ষে আপনি এটি অনুলিপি করে আপনার ভিবি কোডে রাখতে পারেন। আপনার পেস্ট বাফারে যা আছে তার জন্য এটি করার জন্য আপনি যদি হটকি বেঁধে রাখেন (দ্রুত সঙ্গে নেওয়া: অটোহোটকি ) একই ধারণাটি এসকিউএল ফর্ম্যাটারের জন্য ভাল কাজ করে।


8

এক্সিলেন্ট ক্লাসটি ব্যবহার করে 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")

কেবলমাত্র যদি প্রয়োজন হয় আমি সরাসরি এসকিউএল সার্ভারে কোয়েরিটি পরীক্ষা করতে পারি।

আমার বর্তমান পদ্ধতিটি এসকিউএল সার্ভারে একটি সঞ্চিত পদ্ধতি ব্যবহার করা এবং কেবলমাত্র কল করা যাতে আমি কোয়েরিগুলিতে প্যারামিটারগুলিতে যেতে পারি ইত্যাদি to


5

আমি ভেরিয়েবলের জন্য কীভাবে <! [সিডিএটিএ [<% = সহ) উভয় ব্যবহার করতে পারি তা বুঝতে পেরেছি যা আপনাকে উদ্বেগ ছাড়াই কোড করার অনুমতি দেয়।

আপনাকে মূলত ভিবি ভেরিয়েবলের আগে সিডিএটিএ ট্যাগগুলি সমাপ্ত করতে হবে এবং তারপরে এটি পুনরায় যুক্ত করতে হবে যাতে সিডিএটিএ ভিবি কোডটি ক্যাপচার করে না। আপনাকে একটি কোডে পুরো কোড ব্লকটি মোড়ানো দরকার কারণ আপনার কাছে একাধিক সিডিএটি ব্লক থাকবে।

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

দাবি অস্বীকার: আমি অজগর ভালবাসি। এটি মাল্টি-লাইন স্ট্রিংগুলির একমাত্র কারণ।

তবে আমি ভিবি.নেটও করি, তাই আরও বেশি পঠনযোগ্য দীর্ঘ স্ট্রিংয়ের জন্য আমার শর্ট-কাটটি এখানে।

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

1
আপনার প্রতিটি "লাইন .." এর জন্য লাইনের শেষে _ দরকার যা দেখতে কুৎসিত।
কেনজি নোগুচি

2
আসলে আপনি না। ভিবি-র পরবর্তী সংস্করণগুলি (২০১০ এবং পরবর্তীকালে আমি মনে করি?) অনেকগুলি ক্ষেত্রে এখানে _ এর উদাহরণ সহ কিছু দরকার নেই।
ড্যারিল


1

ভিজ্যুয়াল স্টুডিও 2010 (ভিবি নেট) এ আমি নিম্নলিখিতটি চেষ্টা করি এবং ভাল কাজ করে

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

তবে এখনও আর # দ্বারা সমর্থিত নয়। সুসংবাদ তারা শীঘ্রই সমর্থিত হবে! আপনার যে জেটব্রেইনগুলিরও প্রয়োজন তা অবহিত করার জন্য দয়া করে ইউট্রাককে ভোট দিন ।


0

কোনও লাইন কোড ভেরিয়েবল সহ VB.Net- এ আপনার যদি একটি এক্সএমএল আক্ষরিক প্রয়োজন হয় তবে আপনি এটি এটি করবেন:

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

আপনি এখানে কেন একটি এক্সএমএল আক্ষরিক উল্লেখ করছেন তা নিশ্চিত করুন, মূল প্রশ্নের মধ্যে উল্লিখিত এক্সএমএলটি দেখতে পাবেন না।
Kmeixner

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 টি স্ট্রিংয়ের উদাহরণ তৈরি করেছেন
টিএস

আমি উত্তরাধিকারসূত্রে ভিবি 6 কোড পেয়েছি যা আমাকে ভিবি.এনইট-এ বন্দর করতে হবে যা এগুলি পূর্ণ! :( এই ক্ষেত্রে আমি পঠনযোগ্যতা বজায় রাখতে পারফরম্যান্সকে ত্যাগ করতে পছন্দ করি
জ্যাক ২

তোমার দরকার নেই। আপনি সবসময় কোনও পরিবর্তনশীলকে পুনরায় বরাদ্দ না করেই কনকনেটেট করতে পারেন এবং সেই লাইনের মধ্যে ফর্ম্যাট করতে পারেন
টিএস

আমার ক্ষেত্রে সঠিক বাক্যবিন্যাসে স্যুইচ করার জন্য প্রযোজ্য নয় কারণ আমার একটি সম্পূর্ণ গুচ্ছ কোডটি সংশোধন করা উচিত এবং প্রকল্পে আর সময় নেই left
জ্যাক

-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

না, ভিবি.এনইটি-তে এখনও এমন বৈশিষ্ট্য নেই। এটি ভিবির পরবর্তী পুনরাবৃত্তিতে উপলব্ধ হবে (ভিজ্যুয়াল বেসিক 10) তবে ( লিঙ্ক )


তুমি নিশ্চিত? আমি জানি তারা মাল্টলাইন স্টেটমেন্টগুলিকে অনুমতি দেবে, তবে তারা কি মাল্টলাইন স্ট্রিংগুলিকেও অনুমতি দিবে ? মানে "হ্যালো <নিউলাইন> দুনিয়া"?
মেহরদাদ আফশারি

1
লাইন ধারাবাহিকতা চরিত্র এবং বহু-লাইন আক্ষরিক স্ট্রিং অপসারণ বিভিন্ন বৈশিষ্ট্য।
জারেডপাড়

-16

যদি এটি সি # এর মতো হয় (আমার কাছে ভিবি নেই installed নেট ইনস্টল নেই) আপনি @ এর সাথে একটি স্ট্রিং উপসর্গ করতে পারেন

foo = @"Multiline
String"

এটি "" সি: \ উইন্ডোজ \ সিস্টেম 32 \ "এর মতো জিনিসের জন্যও দরকারী - এটি মূলত পলায়ন বন্ধ করে দেয় এবং মাল্টলাইন চালু করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.