C#13の `\e` にVB.NETで対応する
C#13 の `\e`
C#13から ESC を表す新しいエスケープシーケンスである `\e` が使えるようになりました。今までは `\u001b` と表記する必要がありました。エスケープシーケンスとは `\n` とか `\t` などのことです。
ESC はエスケープ文字と呼ばれるので、`\e` はエスケープ文字のエスケープシーケンスですね。紛らわしい……。
VB.NET で `\e`
VB.NET ではそもそもエスケープシーケンスという書き方がありません。`\t` と書くことはできず、`vbTab` を使ったりしていました。
じゃあ VB.NET で `\e` 相当の文字は使えないのかと言うと、そんなことはなく、Chr か ChrW で ESC 文字を作ることができます。あまり知られていませんが、VB.NET において Chr と ChrW は特別扱いされており、コンパイル時に処理できる値はコンパイル時に処理します。つまり定数化できるということです。
Const ESC As Char = Chr(&H1B)
' または
Const ESC As Char = ChrW(&H1B)
これらを使うことで、ターミナル(コンソール)が対応していれば、文字の色を変えるなどできたりします。
Option Explicit On
Option Strict On
Option Infer On
Module Program
Const ESC As Char = ChrW(&H1B)
Sub Main()
Console.WriteLine(ESC & "[31mHello, World! このテキストは赤で表示" & ESC & "[0m")
End Sub
End Module
VBA/VB6 では?
Chr / ChrW のコンパイラによる定数処理がなされないので、ESC は変数にする必要があります。
さらに VBA のイミディエイトウィンドウは ESC 文字による色付けに対応していないので、きれいに表示されず、ただのノイズが出てしまいます。
外部のエスケープシーケンスに対応したコンソールに出力すれば色付けできるでしょうが、今回はそこまでしたくないのでやりません。割に合わないと判断しました。
参考コード
Dim ESC As String
ESC = Chr(&H1B)
Debug.Print ESC & "[31mHello, World! このテキストは赤で表示" & ESC & "[0m"