0

重複の可能性:
VB 文字列の二重引用符をエスケープする

以下の変数に文字列値を割り当てています。これを達成する方法はわかりませんが、これらを引用符で印刷したいと思います。これまでのところ、引用符がない場合を除いて、すべてが正常に印刷されます。私が持っているものは以下です:

    Dim tU As String = "Print_Me"
    Dim tU2 As String = ""
    Dim str1 As Integer = 1
    Dim str2 As String = tU
    Dim str3 As Single = 3.5
    Dim str4 As String = tU2

    Dim fw As New System.IO.StreamWriter("testfile.txt")
    fw.WriteLine(str1 & "," & str2 & "," & str3 & "," & str4 & "," & 0)

    fw.Close()
    fw.Dispose()
    'prints>>>1,Print_Me,3.5,,0<<<
    'I like to print>>>1,"Print_Me",3.5,"",0<<<

編集

    Dim tU As String = "Print_Me"
    Dim tU2 As String = ""
    Dim str1 As Integer = 1
    Dim str2 As String = tU
    Dim str3 As Single = 3.5
    Dim str4 As String = tU2
    Dim str5 As Integer = 0

    Using fw As New System.IO.StreamWriter("testfile.txt")
        fw.WriteLine(String.Format("""{0}"",""{1}"",""{2}"",""{3}"",""0""", str1, str2, str3, str4, str5))
    End Using

    ''Currently prints>>> "1","Print_Me","3.5","","0"

    ''I would like to print>>> 1,"Print_Me",3.5,"",0

str1 から str5 まで間接的に入力していますが、すべてのアイテムを引用符で印刷したくないので、これを達成するためにソリューションをどのように調整すればよいでしょうか?

4

2 に答える 2

2

"二重引用符を2 回入力してエスケープしてみてください。また、String.Format は連結よりも整頓されていることがわかります。StreamWriter を using ブロックでラップする場合、これを破棄する必要はありません。これはガベージ コレクターによって行われるためです。

Dim str1 As Integer = 1
Dim str2 As String = "Print_Me"
Dim str3 As Single = 3.5
Dim str4 As String = ""

Using fw As New System.IO.StreamWriter("testfile.txt")
    fw.WriteLine(String.Format("""{0}"",""{1}"",""{2}"",""{3}"",""0""", str1, str2, str3, str4))
End Using

また、おそらく変数にわかりやすい名前を付けることができます。型にちなんで名前を付けることは、変数が保持する情報についての情報を実際に提供しないため、悪い習慣と見なされます。strコードを読んでいる誰かが変数が文字列であると誤って考え、そのように扱おうとする可能性があるため、Integer または Single の前に を付けることはさらに悪いことです。

編集:あなたのコメントに応えて、まず、VB.Net 文字列で""は、二重引用符の単一のインスタンスを表します。二重引用符を削除する場合は、を削除して、""他のすべてをそのままにしておきます。第二に、文字列の一部が間接的に設定されていても問題ありません。新しい文字列でそれらを使用するために新しい変数を作成する必要はありません。コードtuでは、 と がとstr2のように同じデータを指している場合、新しい変数を作成する必要はありません。変数に保持されているデータがある場合、別の方法で使用するために新しい変数を作成する必要はありません。tu2str4

于 2012-09-30T17:31:38.617 に答える
0

出力が非常に規則的である (さらに多くの文字列が含まれる可能性がある) 場合、検討したい代替手段は次のとおりです。

Dim str1 As Integer = 1
Dim str2 As String = "Print_Me"
Dim str3 As Single = 3.5
Dim str4 As String = ""

Dim strings() As String = _
{ _
    str1, _
    str2, _
    str3, _
    str4, _
    "0" _
}

Using fw As New System.IO.StreamWriter("testfile.txt")
    fw.WriteLine( _
        String.Join( _
            ",", _
            strings.Select(Function (s) """" & s & """")))
End Using

インライン引用を示すために引き続き を使用し""ますが、それを行う必要があるのは 2 回だけです。文字列のリストが大きくなった場合は、それらを配列に追加するだけで済みます (または、リストまたはその他の列挙可能なものにすることができます)。

于 2012-09-30T23:41:15.080 に答える