2 返信 最新の回答 日時: Feb 17, 2012 6:03 PM ユーザー:Tamakichi

    ひらがな、カタカナ、漢字、英数字を値に変換したい

    Tamakichi

      タイトル

      ひらがな、カタカナ、漢字、英数字を値に変換したい

      フォーラムに投稿

      テキストの文字幅を数値で表せないかと試行錯誤しております。Length 関数は文字数を数えるものので、自分が数えたい文字幅さとは少し違います。

       

      たとえば「日本語テキスト」フィールド」には「あアぁ亜A1」とあり、

      ・ひらがな、カタカナの場合は「8pt」

      ・小文字ひらがな、カタカナの場合は「4pt」

      ・漢字の場合は「10pt」

      ・英数字の場合は「3pt」

      というふうに変換して、「文字幅」フィールドの中に「8+8+4+10+3+3」で合計「36」と出てくるようにしたいのです。

      フォントなどで数値が多少変わるのは承知していますが、ごく限られた環境下の運用を想定していますので、ひら・カナ、小文字ひら・カナ、漢字、英数字、で分けられて、値が求められれば充分と考えています。

      「Code」関数を使ってみるのはどうかと思い、たとえば Unicode 文字パレットを参照にして値を10進数で表示するなら、ひらがな&カタカナは「12353 から 12542」の間、漢字は「13312 から 40880」、全角数字は「65297 から 65312」という値に収まりますので、ケースごとに値を変換すれば!……と考えたのですが、Code 関数を使って、別途用意した計算フィールド に「日本語テキスト」フィールドの文字を全部表示させる場合、400桁までしかフィールドに数字は表示出来ず、少し長い文章だとこのアイディアが使えませんでした。

       

      どうかよろしくお願いします。

        • 1. Re: ひらがな、カタカナ、漢字、英数字を値に変換したい
          hiro_

           「日本語テキスト」を繰り返し計算フィールドへ文字分解して書き出し、文字→文字コード→ポイント変換します。その式は、

           Let(
            CD=Code(Middle(日本語テキスト[1];Get(計算式繰り返し位置番号);1));
            Case(
             12353<=CD and CD<=12542; 8;
              13312<=CD and CD<=40880; 10;
               65297<=CD and CD<=65312; 3; ・・・・・・・とか
            )
           )

          などとし(caseの中身は例示で、実際の判別数値と入れ替えてください)、それぞれ文字ごとのポイント数を算出します。

          この繰り返しフィールドの計算結果をSum合計計算して「文字幅」に代入すれば完成です。式は、

           Sum(繰り返しフィールド)

          • 2. Re: ひらがな、カタカナ、漢字、英数字を値に変換したい
            Tamakichi

            Hiro 様、ご教授ありがとうございます。

            そして、教えてもらったとおりのやり方で出来ました!!!!

            式をそのまま計算フィールドに入れても「8」としか出て来なかったのですが、繰り返しの値を「128」に変えたところ(最大でもこのくらいの文字数なので)、Sum合計した計算結果フィールドに期待通りの数値が帰って来ました!

            大変助かりました。ありがとうございます!!