全角半角変換

Xojo 2019 r3.1を使っています。
文字列の全角・半角変換はどのようにしたらいいですか?

例えば、
123 → 123
です。

Private Function Zen2Han(source As String) as String
  Dim ZenkakuNumber() As String = Array("?","?","?","?","?","?","?","?","?","?")
  Dim HankakuNumber() As String = Array("0","1","2","3","4","5","6","7","8","9")
  
  If source.Len <> 1 Then
    MsgBox "??????????1?????"
    Return source
  End If
  
  For i As Integer = 0 To ZenkakuNumber.Ubound
    If ZenkakuNumber(i) = source Then
      Return HankakuNumber(i)
    End If
  Next
  
  Return source
End Function

ありがとうございます。
なるほど、せめて perl でいう tr のようなものがあればと思いましたが、自前で地道に処理するしかなさそうですね。
今回、ひらがな→カタカナ変換も含める必要があったので以下のようなメソッドを作ってしのぎました。
(汗

Var result As String
result = zenString
result = result.ReplaceAll("?", " ")
result = result.ReplaceAll("?", "1")
result = result.ReplaceAll("?", "2")
result = result.ReplaceAll("?", "3")
result = result.ReplaceAll("?", "4")
result = result.ReplaceAll("?", "5")
result = result.ReplaceAll("?", "6")
result = result.ReplaceAll("?", "7")
result = result.ReplaceAll("?", "8")
result = result.ReplaceAll("?", "9")
result = result.ReplaceAll("?", "0")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "A")
result = result.ReplaceAll("?", "B")
result = result.ReplaceAll("?", "C")
result = result.ReplaceAll("?", "D")
result = result.ReplaceAll("?", "E")
result = result.ReplaceAll("?", "F")
result = result.ReplaceAll("?", "G")
result = result.ReplaceAll("?", "H")
result = result.ReplaceAll("?", "I")
result = result.ReplaceAll("?", "J")
result = result.ReplaceAll("?", "K")
result = result.ReplaceAll("?", "L")
result = result.ReplaceAll("?", "M")
result = result.ReplaceAll("?", "N")
result = result.ReplaceAll("?", "O")
result = result.ReplaceAll("?", "P")
result = result.ReplaceAll("?", "Q")
result = result.ReplaceAll("?", "R")
result = result.ReplaceAll("?", "S")
result = result.ReplaceAll("?", "T")
result = result.ReplaceAll("?", "U")
result = result.ReplaceAll("?", "V")
result = result.ReplaceAll("?", "W")
result = result.ReplaceAll("?", "X")
result = result.ReplaceAll("?", "Y")
result = result.ReplaceAll("?", "Z")
result = result.ReplaceAll("?", "a")
result = result.ReplaceAll("?", "b")
result = result.ReplaceAll("?", "c")
result = result.ReplaceAll("?", "d")
result = result.ReplaceAll("?", "e")
result = result.ReplaceAll("?", "f")
result = result.ReplaceAll("?", "g")
result = result.ReplaceAll("?", "h")
result = result.ReplaceAll("?", "i")
result = result.ReplaceAll("?", "j")
result = result.ReplaceAll("?", "k")
result = result.ReplaceAll("?", "l")
result = result.ReplaceAll("?", "m")
result = result.ReplaceAll("?", "n")
result = result.ReplaceAll("?", "o")
result = result.ReplaceAll("?", "p")
result = result.ReplaceAll("?", "q")
result = result.ReplaceAll("?", "r")
result = result.ReplaceAll("?", "s")
result = result.ReplaceAll("?", "t")
result = result.ReplaceAll("?", "u")
result = result.ReplaceAll("?", "v")
result = result.ReplaceAll("?", "w")
result = result.ReplaceAll("?", "x")
result = result.ReplaceAll("?", "y")
result = result.ReplaceAll("?", "z")
result = result.ReplaceAll("?", "+")
result = result.ReplaceAll("?", "-")
result = result.ReplaceAll("?", "/")
result = result.ReplaceAll("?", "*")
result = result.ReplaceAll("?", "=")
result = result.ReplaceAll("?", "_")
result = result.ReplaceAll("?", "(")
result = result.ReplaceAll("?", ")")
result = result.ReplaceAll("?", "[")
result = result.ReplaceAll("?", "]")
result = result.ReplaceAll("?", "{")
result = result.ReplaceAll("?", "}")
result = result.ReplaceAll("?", "<")
result = result.ReplaceAll("?", ">")
result = result.ReplaceAll("?", "_")
result = result.ReplaceAll("?", "#")
result = result.ReplaceAll("?", "$")
result = result.ReplaceAll("?", "%")
result = result.ReplaceAll("?", "&")
//result = result.ReplaceAll("”", """) // fmm...
result = result.ReplaceAll("’", "'")
result = result.ReplaceAll("‘", "`")
result = result.ReplaceAll("?", "@")
result = result.ReplaceAll(";", ";")
result = result.ReplaceAll(":", ":")
result = result.ReplaceAll(",", ",")
result = result.ReplaceAll(".", ".")
result = result.ReplaceAll("?", "?")
result = result.ReplaceAll("?", "!")
result = result.ReplaceAll("?", "|")
result = result.ReplaceAll("?", "^")
return result


試してはいませんが,Xojoの正規表現関連はPCRE library 8.33を使用していますので,RegExを用いれば少ないコードで変換が可能かと思います。

はじめまして。
Ascを使って、文字コードを取得し、平仮名とカタカナのコード位置の差は96なので、値を引けば、平仮名〜カタカナ変換できます。

新規のファイルにテキストフィールドを作り
TextChangeのイベントにこれを入れてみてください。変換できると思います。他の、全角半角も、コードの並びの差は一定だと思いますので、同じようにできるので、調べると、52943ですね。文字の!とかはアスキー文字で、アルファベットでも-65248ですね。これで、メソッド作れば、短くできると思います。でも、例外あるかもですけどね。これUTF-8のコードですけど、まあ、JISとかでも、コード内でencoding変えて、UTF-8に変換して、JISとか他のエンコードが必要ならConvertEncoding使って元に戻せばいいかなと思います。
カタカナ変換
Var theS As Integer=Asc(TextField1.Value)+96

TextField2.Value=Chr(theS)

全角半角
Var theS As Integer=Asc(TextField1.Value)+52943

TextField2.Value=Chr(theS)

平仮名以外
Var theS As Integer=Asc(TextField1.Value)-65248

TextField2.Value=Chr(theS)

で、最初の123を123にするとかは

Var theCount As Integer=TextField1.value.Length
Var theStr As String
For i As Integer=0 To theCount
theStr=theStr+Chr(Asc(TextField1.Value.Middle(i,1))-65248)
Next

TextField2.Value=theStr

とかってやれば、いいと思います。

で、補足ですけども、実装する時にやはりAsc使って、文字コードの位置を調べて、条件分けして引いたり足したりする値をセットして、Chrで文字に変換すればいいと思います。まあ、他にもやり方あるかもですけどね。