見出し画像

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"
イミディエイトウィンドウでは期待通り表示されない

この記事が気に入ったらサポートをしてみませんか?