2015年11月24日火曜日

VB 文字の変換 全角半角大文字小文字

文字の変換 と言っても、「aiu」 を 「あいう」 に 「タイトル」 を 「title」 に 変えよう と言うのではありません。
全角半角の双方に文字がある ひらがな・カタカナ・アルファベット・数字 の操作と 半角の 大文字・小文字 の操作をしたいと。
Internet 上には その様なサービスもありますが、 お手軽に使いたななぁ と。
そこで、 ちょこちょこ っと 書いて見ました。


発端はこうです。
  音楽を PC に取り込む際に、Internet 上から取得される文字表記がバラバラなのですね。
  酷い場合には、洋楽のタイトルなのに、全角半角が ごちゃ混ぜ ! (1枚の CD なのに) なんて事すら。
  これでは頂けないので こつこつと手入力したりする羽目になります。
  例えば、英数は 全て 半角にして 頭文字のみ 大文字 にする とか。
  手作業は、 ... タイプミスも多いし 面倒だし ... 。
  ソフトに複数行をコピーしてボタンをポンで 一括変換出来たら ... 、 そりゃぁ 楽ですね。
と言う訳で、 捻り出したのが、 今回ご紹介の こちら。

あっ、そう、 最初にお断りして置きます。
これは、 日本語専用。  つまり、OS のロケールが Japanese になっている前提です。  条件外ではエラーを吐く!  たぶん ね。.


と言う事で、一旦、プログラムを書いては見たのですが、 大きな 難題 に遭遇。

今回の対象って、音楽のタイトルです。
日本語・英語 ばかりでなく、 ドイツ語だの スペイン語だの フランス語だの ポルトガル語だの のタイトルだって あります!。
そんな対象に、 全角半角を操作すると 困った事に。

そうです、 ラテン系特殊文字*1 が消えてしまうのです。
        そりゃぁ、そうでしょう。  よくよく調べて見れば、これらの文字は2バイト(全角相当)文字が多い。.
頻繁に目にする 全角半角操作 の StrConv 系は 日本語・英語 が前提なのでしょうね。
ラテン系特殊文字*1  は全角扱いのものがあるので、 これを表現するには 全角半角を操作しては いけません!。
        この事に気付くのに、随分と時間が掛かりました ... 。  ふぅ ... 。

                ラテン系特殊文字*1 一例 : Köln の ö 、NOËL の Ë 、 Jésus-Christ の é 、 ... 。

以下は、この点を 少しは 配慮したものです。   外国語、良く分っていないので ... 少し です。 :) 。.


先ずは、お披露目。

翻訳 Web ソフトに倣い、 左に 元文章、 右に 変換後文章、 です。
操作用の Button 類は 一切 ありません。  文字や選択肢の変更を拾う仕組みです。  Close 位はあった方が良かったかなぁ。.
主要な Control のみ、 ToolTip 付き です。
変換の条件は、 左に 全角・半角 / ひらがな / カタカナ / 無操作、 右に 大文字小文字 / 頭文字のみ大、 です。
尚、終了時に ComboBox の値を .exe.config (XML) に書き出して、次回実行時の初期値にしています。.
入力枠と結果枠の文字数に応じたサイズ調整はしていません。  面倒なので。.





例が、双方共、大文字化 になってしまいましたね。  実際は 半角化 頭文字のみ大文字化 の出番が圧倒的に多いですが ... 。.


   https 接続の別 Blog で DownLoad Link を公開しました。  実行ファイル一式です。 *1.
   https://shiroyuki-mot-presents.blogspot.com/2015/12/download-spellingtyping.html
                     Link の無断転載を禁じます!。.



尚、 変換部分の ポイント だけ コードを載せて置きます。  (Debug 時のもの ComboBox 値追従は未対応の頃のもの)
ラテン系特殊文字の操作に係る部分です。
   敢えて、ぐちゃぐちゃの このコード を載せて置きます。  こんな感じで Debug してます。.

       Me.TextBox2.Text = StrConv(Me.TextBox1.Text, VbStrConv.None)
        'Me.TextBox2.Text = Me.TextBox1.Text
        'Me.TextBox2.CharacterCasing = CharacterCasing.Normal '入力時に大文字小文字を許容するだけ
        'Me.TextBox2.Text = StrConv(Me.TextBox1.Text, VbStrConv.ProperCase) 'スペイン語やドイツ語やポルトガル語は 英語に

        Dim ti As System.Globalization.TextInfo = _
                    System.Globalization.CultureInfo.CurrentCulture.TextInfo
        '1st to Lower
        Me.TextBox2.Text = ti.ToLower(Me.TextBox2.Text)
        '2nd to Only Top-Char. Upper
        Me.TextBox2.Text = ti.ToTitleCase(Me.TextBox2.Text)
        ' Unicode のラテン 1 補助 の文字も変換可能 Ex. スペイン語やドイツ語やポルトガル語 但し、全角変換しない前提


完全なものではないと思いますが、 活躍 しています。   これで、大抵は コツコツと手入力しないで済む!。.



[2015/12/16] .exe ファイル公開  *1.

1 件のコメント:

  1. あっ、本文で書き忘れました。
    もし、開発環境をお持ちでなく、 このツールを使いたい と言う方がいらっしゃいましたら、
    コメント あるいは お問い合わせ から ご要望 戴ければ、公開する用意があります。

    返信削除