漢数字への変換について


くまじろう  2015-09-05 00:09:59  No: 47610

こんにちは。
お世話様です。

手形の金額印刷で使用したいのですが、
Excelにあります  関数  =NUMBERSTRING(A1,2)  のように
日頃使用している数字(123456・・・)から
漢数字に変換することが
Delphi XE5ではできるのでしょうか?


通りすがり  2015-09-05 01:15:46  No: 47611

Delphi標準の関数ではできませんね。自分で実装する必要があります。
ちょっと検索してみましたが、そういうものは見つかりませんでした。


tor  2015-09-05 02:57:53  No: 47612

数を漢数字で表すのにも「一二三四五」だったり「一万二千三百四十五」だったり色々な方法があります。
ヲサヲサナにあります  関数ヲサヲサスホユヘツナメモヤメノホヌィチアャイゥヲサヲサのように
と言われても、手元にナがない人にはどんなものかわからないと思うので
どのような変換を求めているのか、具体例を示した方がいいのではないでしょうか。

……と言うかこれ、いわゆる「隠し関数」らしくて関数一覧にもヘルプにも出てきませんね。
ナ持ってたとしても仕様がわからないじゃないですかー!ヲサ困った。

ならば実際に試して仕様を探るしかあるまい、ということでちょいと試した結果
ヲサスホユヘツナメモヤメノホヌィアイウエオーーカキクケアーャイゥヲサ→ヲサ壱兆弐阡参百四拾伍億六拾七萬八阡九百壱拾
となりました。ふむむ……金額印刷という用途と考えあわせると
ュヲサ大字(壱弐参四伍六七八九拾百阡……)を使う
ュヲサーの桁はとばす(〇は使わない)
ュヲサ「壱」は省略せず常に明記する。例えばアイは「拾弐」ではなく「壱拾弐」
のようなルールでいいんですかね?ヲサこれだったら

  下からエ桁ずつに区切って(スアーーーーで割りながら余りをとっていって)
  そのエ桁がーでなかったら
    以下エ回繰り返しコ
      下からア桁取り出す
      そのア桁がーでなかったら
        ア→壱ャヲサイ→弐ャヲサ……ヲサのように対応する漢数字に置換する
        桁に応じて「」「拾」「百」「阡」を足す
    エ桁分が出来上がったら、さらに数詞(萬、億、兆……)を付ける
  以上をーになるまで繰り返す

といったアルゴリズムでできるのではないでしょうか。
(後は値がーや負の場合の考慮も忘れずに……)
スススススススススススススススススススススススススススススススススススススススス
ニコ くまじろう
トコ イーアオッーケッーエィ金ゥ アケコエエコイエ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「。」 「  ン

さん、ごめんなさい説明不足でした。
ご推察通り太字を使った金額を表記したんですが、
関数がないようですので、教えて頂いたロジックで
関数をつくってみます。
出来ましたら、ご報告させていただきます。
ありがとうございます。
スススススススススススススススススススススススススススススススススススススススス
ニコ ネトトから発掘
トコ イーアオッーケッーエィ金ゥ イーコアケコウイ  書込者ノト:ロ 「。ァ ン

再確認はしていない

ヲサヌテモィホコサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサッッ百千万の単位はつけない
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヘコツサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサッッゼロは難しい漢字で返すィデフォはヲサニゥ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサレノハコツスニゥコヲササ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサッッヲサアヲサイヲサウヲサエヲサオヲサカヲサキヲサクヲサケアーアアアイアウアエ
ヲサヲサテモコスァ〇一二三四五六七八九十百千万ァサ
ヲサヲサレスァ零ァサ

ヲサヲサホユャ
ヲサヲサホモコサ
ヲサヲサャ
ヲサヲサメホャ
ヲサヲサホノャ
ヲサヲサトコサ

ヲサヲサメコスァァサ
ヲサヲサヲサホスーヲサ
ヲサヲサ
ヲサヲサヲサヲサヲサレノハヲサ
ヲサヲサヲサヲサヲサヲサメコスレヲサヲサヲサメコステモロアンサ
ヲサヲサヲサヲササ
ヲサヲササ

ヲサヲサヲサホヲサアーヲサッッ一桁
ヲサヲサ
ヲサヲサヲサヲサメコステモロホォアンサ
ヲサヲサヲサヲササ
ヲサヲササ

ヲサヲサホモコスノヤモィホゥサ
ヲサヲサヲサヘヲサッッ単位無し
ヲサヲサ
ヲサヲサヲサヲサヲサコスアヲサヲサフィホモゥヲサ
ヲサヲサヲサヲサヲサヲサメコスメォテモロモヤノィホモロンゥォアンサ
ヲサヲサヲサヲササ
ヲサヲササ
ッッここから「百千万」の単位あり
ヲサヲサヲサフィホモゥヲサフィテモゥュケヲサ
ヲサヲサ
ヲサヲサヲサヲサヘヘツィテモロフィテモゥンォァヲサの桁までしかサポートされていませんァゥサ
ヲサヲサヲサヲササ
ヲサヲササ

ヲサヲサトコスアサッッ桁
ヲサヲサヲサコスフィホモゥヲサヲサアヲサ
ヲサヲサ
ヲサヲサヲサヲサホノコストォケサッッ対応単位
ヲサヲサヲサヲサメホコスモヤノィホモロンゥサッッ現在の桁の数値

ヲサヲサヲサヲサヲサィトスアゥィメホヲサアゥヲサッッ一桁目か数値がヲサーヲサなら単位無し
ヲサヲサヲサヲサヲサヲサヲサホユコスァァヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサヲサホユコステモロホノンサ
ヲサヲサヲサヲサッッ数値がゼロヲサヲサ二桁目以降で数値がヲサアヲサなら単位のみヲサヲサ単位が万以下
ヲサヲサヲサヲサヲサィメホスーゥィィメホヲサイゥィトヲサアゥゥィホノヲサアエゥヲサ
ヲサヲサヲサヲサヲサヲサメコスホユォメヲサ
ヲサヲサヲサヲサヲサヲサヲサヲサメコステモロメホォアンォホユォメサ
ヲサヲサヲサヲサノィトゥサ
ヲサヲササ

スススススススススススススススススススススススススススススススススススススススス
ニコ ネ
トコ イーアオッーケッーカィ日ゥ ーケコーケコアア  書込者ノト:ロ 」「。 ン

さんのアルゴリズムを元に作ってみました…はずだったんですが、ナのホユヘツナメモヤメノホヌ関数に準拠させたり、
オリジナル機能を追加したりと、いろいろこねくり回してたら原型を留めなくなってました(汗)

本物のホユヘツナメモヤメノホヌ関数を「見ないで」作ったので、動作の正確性は保証できません!ヲサご注意。
※ヲサーヲサやマイナスをどうしたらいいか悩んだのですが、それぞれヲサァ零ァヲサとヲサァ−ァヲサにしときました。

■ヨパラメータ:ヲサ変換する値
ヲサノカエヲサなので、ュケイイウウキイーウカクオエキキオクーク(、クーーーーーーーーーーーーーーー)〜ー〜ヲサケイイウウキイーウカクオエキキオクーキ(、キニニニニニニニニニニニニニニニ)まで
ヲサケイイウウキイーウカクオエキキオクーキヲサだと、九百弐拾弐京参阡参百七拾弐兆参百六拾八億伍阡四百七拾七萬伍阡八百七ヲサになります

■モパラメータ:ヲサ出力形式を指定
ヲサアヲサ…ヲサ漢数字(簡単)※ホユヘツナメモヤメノホヌ関数と同じ結果を得るには、マアパラメータをヤに設定する
ヲサイヲサ…ヲサ漢数字(大字)
ヲサウヲサ…ヲサ数字ヲサーョョケヲサを、ただヲサ〇ョョ九ヲサに置き換えたもの、使いどころがほとんど無いような
ヲサエヲサ…ヲサ一二億三四五六万七八九〇ヲサみたいな形式、どこかで使われていた気がしたので、勢いで追加

■マアパラメータ:ヲサヤを指定すると省略可能な「一」・「壱」を取り除く、モパラメータがヲサアヲサヲサイヲサのときに有効

■出力例
ヨスヲサアイウアイウーーーアイウアイウ
モスアャヲサマアスニヲサヲサ一百二十三兆一千二百三十億一十二万三千一百二十三
モスアャヲサマアスヤヲサヲサヲサ百二十三兆千二百三十億十二万三千百二十三
モスイャヲサマアスニヲサヲサ壱百弐拾参兆壱阡弐百参拾億壱拾弐萬参阡壱百弐拾参
モスイャヲサマアスヤヲサヲサヲサ百弐拾参兆阡弐百参拾億拾弐萬参阡百弐拾参
モスウャヲサマアスホッチヲサヲサヲサヲサ一二三一二三〇〇〇一二三一二三
モスエャヲサマアスホッチヲサヲサヲサヲサ一二三兆一二三〇億一二万三一二三

ュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュュ

ッッ※ヲサナのホユヘツナメモヤメノホヌ関数に(見よう見まねで)準拠していますが、一部仕様が異なります。
ッッ※ヲサモパラメータがヲサアヲサのときにホユヘツナメモヤメノホヌ関数と同じ結果を得るには、省略可能な「一」を
ッッ※ヲサ取り除くためにマアパラメータをヤに設定します。
ッッ※ヲサモパラメータがヲサイ(大字)のとき、ホユヘツナメモヤメノホヌ関数と同様のヲサァ壱弐参伍拾阡萬ァヲサといった
ッッ※ヲサ漢字を出力しますが、ラの”大字”の項目によりますと…
ッッ※ヲサヲサ「法令で定められているのは壱、弐、参、拾のみ」、「伍は商取引などで使われる場合は少ない」
ッッ※ヲサとのことなので、使用する際は調整のため文字セットの定数を変更する必要があるかも知れません。
ッッ
ヲサホモィヨコヲサノカエサヲサモコヲサノサヲサマアコヲサツヲサスニゥコヲサモサ

ヲサヲサホコヲサロアョョエンヲサヲサメ
ヲサヲサヲサヲサトャヲサミアャヲサミイコヲサラモサ
ヲサヲサヲサスィ
ヲサヲサヲサヲサィトコヲサァ零一二三四五六七八九ァサヲサミアコヲサァ十百千ァサヲサミイコヲサァ万億兆京ァゥャ
ヲサヲサヲサヲサィトコヲサァ零壱弐参四伍六七八九ァサヲサミアコヲサァ拾百阡ァサヲサミイコヲサァ萬億兆京ァゥャ
ヲサヲサヲサヲサィトコヲサァ〇一二三四五六七八九ァサヲサミアコヲサァァサヲサミイコヲサァァゥャ
ヲサヲサヲサヲサィトコヲサァ〇一二三四五六七八九ァサヲサミアコヲサァ十百千ァサヲサミイコヲサァ万億兆京ァゥ
ヲサヲサゥサ
ヲサヲサヘヲサスヲサァ−ァサ
ヲサヲサミアーコヲサロアョョエンヲサヲサノヲサスィアーャヲサアーーャヲサアーーーャヲサアーーーーゥサ

ヲサヲサヨコヲサノカエサ
ヲサヲサミャヲサヨャヲサミコヲサノサ

ヲサヲサヲサヲサィモヲサヲサロアョョエンゥ
ヲサヲサヲサヲサヲサヲサナョティァミヲサヲサヲサヲサ「ホモ「ァゥサ

ヲサヲサメコスァァサ
ヲサヲサヨコスヨサ
ヲサヲサミコスーサ
ヲサヲサ
ヲサヲサヲサヲサヨコスチィヨヲサヲサアーゥサ
ヲサヲサヲサヲサミコスミヲサヲサエサ

ヲサヲサヲサヲサヲサィモヲサヲサロアャヲサイャヲサエンゥヲサヲサィミスーゥヲサヲサィミヲサヲサーゥヲサヲサィィヨヲサヲサミアーロエンゥヲサヲサーゥ
ヲサヲサヲサヲサヲサヲサヲサメコスホロモンョミイロミヲサヲサエンォメサヲサッッァ万億兆京ァを付加
ヲサヲサヲサヲサヲサィモヲサヲサロアャヲサインゥヲサヲサィヨヲサヲサーゥヲサヲサィミヲサヲサーゥ
ヲサヲサヲサヲサヲサヲサヲサメコスホロモンョミアロミンォメサヲサッッァ十百千ァを付加
ヲサヲサヲサヲサヲサィィモヲサヲサロアャヲサインゥヲサヲサィィヨヲサヲサロイョョケンゥヲサヲサィィヨスアゥヲサヲサィィミスーゥヲサヲサィヲサマアゥゥゥゥゥ
ヲサヲサヲサヲサヲサヲサヲサィモスウゥヲサヲサィィモスエゥヲサヲサィィヨヲサヲサミアーロエュミンゥヲサヲサーゥゥヲサヲサィヨスーゥ
ヲサヲサヲサヲサヲサヲサヲサメコスホロモンョトロヨォアンォメサヲサッッァ零/〇一二三四五六七八九ァを付加

ヲサヲサヲサヲサヨコスヨヲサヲサアーサ
ヲサヲサヲサヲサノィミゥサ
ヲサヲサヲサヨスーサ

ヲサヲサヲサヨヲサーヲサヲサメコスヘォメサ

ッッヲサテスト用
ヲサヤニアョツアティモコヲサヤマゥサ

ヲサヲサホコヲサノカエサ

ヲサヲサヲサヲサヤモヤノカエィナアョヤャヲサホゥヲサヲサ
ヲサヲサヲサヲサヘアョフョチィァナヲサヲサモヤノカエァゥサ
ヲサヲサヲサヲサナサ
ヲサヲササ

ヲサヲサヘアョフョチィニィァヨスヲサ・ァャヲサロホンゥゥサ
ヲサヲサヘアョフョチィァモスアャヲサマアスニヲサヲサァォホモィホャヲサアゥゥサ
ヲサヲサヘアョフョチィァモスアャヲサマアスヤヲサヲサヲサァォホモィホャヲサアャヲサヤゥゥサ
ヲサヲサヘアョフョチィァモスイャヲサマアスニヲサヲサァォホモィホャヲサイゥゥサ
ヲサヲサヘアョフョチィァモスイャヲサマアスヤヲサヲサヲサァォホモィホャヲサイャヲサヤゥゥサ
ヲサヲサヘアョフョチィァモスウャヲサマアスホッチヲサヲサヲサヲサァォホモィホャヲサウゥゥサ
ヲサヲサヘアョフョチィァモスエャヲサマアスホッチヲサヲサヲサヲサァォホモィホャヲサエゥゥサ
ヲサヲサヘアョフョチィモマティァュァャヲサアウーゥゥサ

スススススススススススススススススススススススススススススススススススススススス
ニコ くまじろう
トコ イーアオッーケッアオィ火ゥ アクコエアコウケ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「。 「」  ン
モコ 

こんばんは。
一応、わたしの低レベルなコードで動作できました。

ネトトから発掘さん、ネさん、アドバイスありがとうございます。
これを見てからコーディングすればよかった・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加