web-dev-qa-db-ja.com

VB.NETの複数行の文字列

PythonのようなVB.NETで複数行の文字列を使用する方法はありますか

a = """
multi
line
string
"""

またはPHP?

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

もちろんではない何か

"multi" & _
"line
136
pistacchio

XML Literalsを使用して、同様の効果を実現できます。

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更新:

複数行の文字列リテラルは、Visual Basic 14Visual Studio 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.

詳細が RoslynNew-Language-Features-in-VB-14 Githubリポジトリに追加されます。

213
Vincenzo Alcamo

VB.Netにはそのような機能はなく、Visual Studio 2010でnotが提供されます。jirwinが参照している機能は、暗黙的な行継続と呼ばれます。複数行のステートメントまたは式から_を削除する必要があります。これにより、複数行の文字列を_で終了する必要がなくなりますが、VBにはまだ複数行の文字列リテラルがありません。

複数行の文字列の例

Visual Studio 2008

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

Visual Studio 2010

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

私はこのバリアントを使用しました:

     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()

文字列に<>を許可します

37
ozzy432836

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
"

補間された文字列は$で始まり、内部に含まれる"{および}を処理する必要があることに注意してください-""{{または}}それぞれ。

ここでは、上記のコード例の補間部分の実際の構文強調表示を確認できます。

enter image description here

Visual Studioエディターによる認識がリファクタリング(変数の一括名前変更など)でも機能するかどうか疑問に思う場合は、正しいですこれらでコードリファクタリングが機能します。IntelliSense、参照カウント、またはコード分析もサポートしていることは言及していません。

26
miroxlav

複数行の文字列リテラルはVisual Basic 14.0で導入されました- https://roslyn.codeplex.com/discussions/57188​​4

VS2015プレビューで今すぐ使用できます- http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs (まだできることに注意してください古いバージョンの.NETフレームワークを対象とする場合でもVS2015を使用してください)

Dim multiline = "multi
line
string"

VB文字列は基本的にC#の逐語的文字列と同じです-\ nのようなバックスラッシュエスケープシーケンスをサポートせず、文字列内で改行を許可し、二重引用符 ""で引用符記号をエスケープします

20
Lucian Wischik

これは私にとって本当に役立つ記事でしたが、変数を送信したい場合にconcatenateを指定する方法については誰も言及していませんでした。

... <%=変数%> ...

方法は次のとおりです。

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

14
Destructerator

さて、あなたはあなたのpythonを起動しているように見えるので、次のようにテキストをpythonにコピーすることを提案できますか?

 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"

少なくともそれをコピーして、VBコードに入れることができます。ホットキーをバインドすると( Autohotkey で最も速く)貼り付けバッファにあるものすべてに対してこれを行うとボーナスポイントになります。同じ考えは、SQLフォーマッタでもうまく機能します。

10
RichardJohnn

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
8
windchaser

私にとって、それは言語としてのVBについて最も厄介なことです。真剣に、私は一度ファイルに文字列を書き、次の行に沿って何かを書いた:

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

必要に応じて、SQLサーバーで直接クエリをテストできます。

私の現在の方法は、SQL Serverでストアドプロシージャを使用し、それを呼び出すだけで、クエリなどにパラメータを渡すことができます

7
Osiname

変数に<%=とともに<![CDATA [を使用する方法を見つけました。これにより、心配なくコーディングできます。

基本的に、CDATAタグがVB変数の前で終了し、その後に追加し直さなければ、CDATAはVBコードをキャプチャしません。複数のCDATAブロックがあるため、コードブロック全体をタグでラップする必要があります。

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

文字列をリソースファイル(たとえば、「My Project」/ Resources)に入れて(必要ですか?)

 Dim a = My.Resources.Whatever_you_chose
3
habakuk

免責事項:私はPythonが大好きです。複数行の文字列が理由の1つにすぎません。

しかし、私はVB.Netも行っているので、より読みやすい長い文字列へのショートカットです。

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

あなたはこれのためにXMLを使うことができます

dim vrstr as string = <s>
    some words
    some words
    some
    words
</s>
2
Jack Gajanan

Visual Studio 2015の一部としてVisual Basic 14で利用可能 https://msdn.Microsoft.com/en-us/magazine/dn890368.aspx

ただし、R#ではまだサポートされていません。良いニュースは、すぐにサポートされることです! Youtrack に投票して、JetBrainsにもそれらが必要であることを通知してください。

1
Bart VdA

visual Studio 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
user1166557

VB.Netで行コード変数を使用したXMLリテラルが必要な場合は、次のようにします。

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

vbCrLfまたはvbNewLineを使用します。 MessageBoxesおよび私がテストした他の多くのコントロールで動作します。

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

2行の2つの同一のMessageBoxが表示されます。

0
LuizLoyola

この方法でSystem.Text.StringBuilderクラスを使用することもできます。

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

次に、次を使用して複数行の文字列を取得します。

sValue.ToString()
0
ᗩИᎠЯƎᗩ