文字列の一種として、特殊文字の「改行」「タブ」「バックスペース」等をシステム定数として定義されています。
この定義済みの文字列を紹介します。 特殊文字として使うとすれば「復帰」「ラインフィード」「改行」「タブ」「バックスペース」ぐらいでしょうか。
以下の様にシステム定数文字列 vbCr , vbLf , vbNewLine , vbTab , vbBack を使います。 長さが1(復帰のみ2)の文字列として文字列変数にそのまま代入したり連結する形で使えます。 (これらの文字列は Microsoft.VisualBasic.Constants モジュールに定義されています。)
また Microsoft.VisualBasic.ControlChars モジュールにも同じものが定義されていますので、こちらを使うこともできます。
ところで1つはまる点があるのですが、 C# や PHP などではダブルクォテーションで文字列を定義した時に 「¥」円マーク(バックスラッシュ)でエスケープ文字として特殊文字を記述できるので VB.NET でも同じ様に記述すると 単なる「¥」と「n」等の文字そのものになります。
■定義済みの文字列定数
Dim str1 As String Dim str2 As String Dim str3 As String '復帰文字 : &H0D str1 = vbCr str2 = ControlChars.Cr str3 = "\r" 'VB.NET では \ はそのままの文字列でエスケープシーケンスではない! Console.WriteLine("vbCr = ControlChars.Cr : " & (str1 = str2) & _ " ControlChars.Cr = ""\r"" : " & (str2 = str3)) 'ラインフィード文字 : &H0A str1 = vbLf str2 = ControlChars.Lf str3 = "\n" Console.WriteLine("vbLf = ControlChars.Lf : " & (str1 = str2) & _ " ControlChars.Lf = ""\n"" : " & (str2 = str3)) '復帰文字とラインフィード文字の組み合わせ : &H0D &H0A str1 = vbCrLf str2 = ControlChars.CrLf str3 = "\r\n" Console.WriteLine("vbCrLf = ControlChars.CrLf : " & (str1 = str2) & _ " ControlChars.CrLf = ""\r\n"" : " & (str2 = str3)) '改行文字(WindowsではvbCrLfと同等) str1 = vbNewLine str2 = ControlChars.NewLine str3 = "\n" Console.WriteLine("vbNewLine = ControlChars.NewLine : " & (str1 = str2) & _ " ControlChars.NewLine = ""\n"" : " & (str2 = str3)) 'タブ文字 : &H9 str1 = vbTab str2 = ControlChars.Tab str3 = "\t" Console.WriteLine("vbTab = ControlChars.Tab : " & (str1 = str2) & _ " ControlChars.Tab = ""\t"" : " & (str2 = str3)) 'バックスペース文字 : &H8 str1 = vbBack str2 = ControlChars.Back str3 = "\t" Console.WriteLine("vbBack = ControlChars.Back : " & (str1 = str2) & _ " ControlChars.Back = ""\b"" : " & (str2 = str3))
上記のソースの部分のみを実行させた場合に、デバッグ出力ウインドウに以下の様に表示されました。
vbCr = ControlChars.Cr : True ControlChars.Cr = "\r" : False vbLf = ControlChars.Lf : True ControlChars.Lf = "\n" : False vbCrLf = ControlChars.CrLf : True ControlChars.CrLf = "\r\n" : False vbNewLine = ControlChars.NewLine : True ControlChars.NewLine = "\n" : False vbTab = ControlChars.Tab : True ControlChars.Tab = "\t" : False vbBack = ControlChars.Back : True ControlChars.Back = "\b" : False
当然なのですが結果から vbCr と ControlChars.Cr は同じであることがわかります。 (他の文字列も同様です)
■定義済みの文字列定数を使う場面について
上記の定義済みの文字列定数を使えば改行等がソース上に視覚的にはっきりとわかる形で記述できます。
ではどの様な時にこれを使う意味が有るのか。 私の場合、改行文字が必要な場面と言えば、 Oracle 等のデータベースへの SQL 文を作成する場合に使用します。 以下のソースでその例をしめします。生成される SQL 文は例なので意味はありません。
'接続文字列(これ自身は意味がありません) Dim strConnect As String = "Data Source=//*********/test; User ID=test;Password=test;" 'オラクル接続オブジェクト Dim Conn As New OracleConnection(strConnect) 'オラクル接続オープン Conn.Open() 'SQL文 Dim strSQL As String = "" strSQL &= "SELECT " & vbCrLf strSQL &= " TT.伝票番号, TT.伝票日付" & vbCrLf strSQL &= "FROM 売上伝票 TT" & vbCrLf strSQL &= "WHERE TT.伝票日付 = TO_DATE('2019/11/12')" & vbCrLf strSQL &= "ORDER BY TT.伝票番号" & vbCrLf 'コマンドオブジェクト(SQL文と接続オブジェクト) Dim Cmd As New OracleCommand(SQL, Conn) Cmd.CommandType = CommandType.Text '読込オブジェクトに接続 Dim dr As OracleDataReader = Cmd.ExecuteReader() '*** この後はデータ処理... ***
このソースでは SQL 文を SELECT FROM WHERE ORDER BY の各句で改行を入れています。
この改行ですが Oracle SQL 文の解析を行う時に空白文字の様にホワイトスペースとして扱われ、文字列の中では単語の区切りとみなされます。 そのため、この SQL 文では句の区切りとして使用しています。
改行を入れなくても、先頭に1文字空白を入れれば同じことにはなるのですが、テキストとして見ると改行が入った方が見やすい為です。 (先頭に空白を入れ忘れた時のバカ除けでもあります)
実際システムではよく実行 SQL 文のログを残したりしますが、 その時に長い文字列の1行よりも適当に改行が入っていた方が見やすいのです。
■ダブルクォテーションそのものを文字列の中に定義する方法
ダブルクォテーションそのものを文字列の中に宣言したい場合について説明します。 文字列はダブルクォテーションで囲まれていますが、その文字列の中でダブルクォテーションを2回連続して記述します。 (""として記述)
文字列の中にダブルクォテーションを記述する例として思い当たるのは、 上記のソースの SQL 文の中でカラム名とテーブル名が全角になっていますが、 Oracleではこれらをダブルクォテーションで 囲んだ方が安全です。(昔の Oracle ではある全角文字がうまく判定できないことがありました。)
結果として以下の様な記述になります。
'SQL文 Dim strSQL As String = "" strSQL &= "SELECT " & vbCrLf strSQL &= " TT.""伝票番号"", TT.""伝票日付""" & vbCrLf strSQL &= "FROM ""売上伝票"" TT" & vbCrLf strSQL &= "WHERE TT.""伝票日付"" = TO_DATE('2019/11/12')" & vbCrLf strSQL &= "ORDER BY TT.""伝票番号""" & vbCrLf
コメント