# 全角半角変換

**URL:** <https://forum.xojo.com/t/topic/52890>\
**Category:** 日本語\
**Created:** [March 24, 2020, 8:39pm UTC](https://forum.xojo.com/t/topic/52890 "2020-03-24T20:39:18Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yoshimasa\_Kawano](https://forum.xojo.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@Yoshimasa\_Kawano](https://forum.xojo.com/u/Yoshimasa_Kawano)\
**Post date:** [March 24, 2020, 8:39pm UTC](https://forum.xojo.com/t/topic/52890/1 "2020-03-24T20:39:18Z")

</div>

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

例えば、  
１２３ → 123  
です。

---

<div class="post-metadata">

**Author:** ![Hironobu\_Sekine](https://forum.xojo.com/user_avatar/forum.xojo.com/hironobu_sekine/32/277_2.png) [@Hironobu\_Sekine](https://forum.xojo.com/u/Hironobu_Sekine)\
**Post date:** [March 25, 2020, 12:34am UTC](https://forum.xojo.com/t/topic/52890/2 "2020-03-25T00:34:15Z")

</div>

```auto
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

```

---

<div class="post-metadata">

**Author:** ![Yoshimasa\_Kawano](https://forum.xojo.com/letter_avatar_proxy/v4/letter/y/ad7895/32.png) [@Yoshimasa\_Kawano](https://forum.xojo.com/u/Yoshimasa_Kawano)\
**Post date:** [March 25, 2020, 12:55am UTC](https://forum.xojo.com/t/topic/52890/3 "2020-03-25T00:55:54Z")

</div>

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

```auto
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

```

---

<div class="post-metadata">

**Author:** ![Hironobu\_Sekine](https://forum.xojo.com/user_avatar/forum.xojo.com/hironobu_sekine/32/277_2.png) [@Hironobu\_Sekine](https://forum.xojo.com/u/Hironobu_Sekine)\
**Post date:** [March 25, 2020, 7:48am UTC](https://forum.xojo.com/t/topic/52890/4 "2020-03-25T07:48:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Kazuto\_Ohshima](https://forum.xojo.com/user_avatar/forum.xojo.com/kazuto_ohshima/32/564_2.png) [@Kazuto\_Ohshima](https://forum.xojo.com/u/Kazuto_Ohshima)\
**Post date:** [May 29, 2020, 12:29am UTC](https://forum.xojo.com/t/topic/52890/5 "2020-05-29T00:29:12Z")

</div>

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

新規のファイルにテキストフィールドを作り  
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にするとかは

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で文字に変換すればいいと思います。まあ、他にもやり方あるかもですけどね。

---

<div class="post-metadata">

**Author:** ![system](https://forum.xojo.com/uploads/default/original/1X/455b4dcc0e61630e9f81940004ddffa49c432a46.png) [@system](https://forum.xojo.com/u/system)\
**Post date:** [April 29, 2021, 4:19pm UTC](https://forum.xojo.com/t/topic/52890/6 "2021-04-29T16:19:55Z")

</div>


