過去の桐井戸端BBS (桐ver.8)
9273 #漢数字の反対を教えて 上田 2001/01/10-23:06
桐ver8.3です。

番地という項目に 553番地と入っています。
その項目に置換をかけて
#漢数字( [番地], 3 )で
五五三番地となったのは良いのですが
逆にこれを553番地に戻す関数が分かりません。

みなさんに笑われそうですが・・・・。
宜しくお願いします。

9276 Re:#漢数字の反対を教えて Ogo 2001/01/10-23:40
記事番号9273へのコメント
#文字置換( ) の入れ子構造かな?

例.
……#文字置換(#文字置換([番地]."〇","0"),"一","1")……

もちろん、この外には "九","9") までの入れ子が続きます

しかし住所等の場合、漢数字を算用数字に戻すのは危ない作業ですよ。
理由は大字・小字等に漢数字の付く場所がたくさんあるからです(例えば「一宮」や「三田」など)。

今回は多分大丈夫なのでしょうが、本来なら、入力データを直接 #漢数字( [番地], 3 ) で
置換するようなことは止めて(元入力データは残したままで)別項目を新たに作り、
そこに項目計算式で
#漢数字( [番地], 3 )
などと設定する方がいいと思うのですが。
 
9278 #漢数字の逆変換関数はありません 佐田 守弘 2001/01/11-00:25
記事番号9276へのコメント
上田さん
#漢数字の逆変換に相当する関数はない様ですね。
基本的にはOgoさんが#9276で書いておられる様に、「#文字置換」関数の10層の入れ子構造で書く事になると思います。
これについての補足ですが、

●「#住所表示番号」関数
数字が、住所表示に関する番号であれば、「#住所表示番号」関数を使って、数字の部分を取り出すことも可能です。
ただし、前後の文字は取り出されないので、町域名を別にもつなどの方法で考える必要があります。

●漢数字表記の問題
漢数字表記は例えば553を「五五三」と記述する以外に、「五百五十三」の様な記述もあります。
この様な表記だと、簡単にアラビア数字には戻せません。
一例として、除夜の鐘の数「百八」を上記の方法で戻そうとしても難しい事が分かると思います。
ただし、これを変換するアルゴリズムもありそうです。
考え方だけ示しますが、
@まず、先頭から位取り文字を見つけて、その前の数詞と組み合わせた数値を作ります。
上記の例では、「百」を取り出して、100の数値に変換します。
A次の「十」に相当するくらいはないので、10の位は0とします。
B残りの「八」は、8に変換して、先程の100に加えます。
この様な方法で、漢数字表記をアラビア数字に変換する方法はあると思います。

●数値以外の数字の場合
漢数字で書かれているけど、アラビア数字に変換する対象でないものをどうするかです。
1つの方法として、全ての漢数字をアラビア数字に変換し、その後で漢数字に戻すものをピックアップして戻す方法も考えられます。
そこで、人名や地名などを含む一般的な言葉で、漢数字が使われている語句がどの程度あるのかを調べてみました。
私の使っている松茸辞書をテキストファイルに書き出して桐に読み込み、漢数字が含まれている語句をピックアップしてみた結果、約14万語の中で3,700語程ありました。
この一覧表を使って、文字置換で元に戻す事も不可能ではなさそうです。

●とは言え...
数字なのか一般の文字なのか機械的には判別しようがないケースもありますね。
例えば人名で「一 一」(でかた はじめ)が名前なのか数字の11なのか、「七五三」が「しちごさん」か753か、さてまた名前の「七五三吉」(しめきち)の一部なのか。
結局は最後は人手で確認するしかなさそうです。

佐田守弘(KS-00119)
9284 Re:#漢数字の逆変換関数はありません 宮城 2001/01/11-09:59
記事番号9278へのコメント
偶然似たような話題に関わっており、一文字ずつ単純変換でよければ、1・一・壱間の変換一括処理は作ってあります。

変換前 変換後
 一   1
 二   2

というようなテーブルを作っておき、一文字ずつ参照し合致すれば置き換えるという、あまり芸のない方法ですが。(^^;;

ご希望ありましたら送付しますけど。

9297 ありがとうございました。 上田 2001/01/11-23:40
記事番号9273へのコメント
正直予想もしない返答に戸惑っています。
あって然るべき関数ではないのでしょうか。
決まった地区を管理している関係で、町名と番地は別項目なのでOgoさんの言うようなことは起こらないようになっているのですが管理工学もそのような理由で反対の関数を作ってないのか????
この関数が必要な事ってないんですかね。

何はともあれ、置換してしまったので、文字置換で直します。

みなさんありがとうございました。
これからも宜しくお願いします。

9304 Re:ありがとうございました。 大川治樹 2001/01/12-17:25
記事番号9297へのコメント
>決まった地区を管理している関係で、町名と番地は別項目なので
>Ogoさんの言うようなことは起こらないようになっているのですが

ちょっと、元々の上田さんのご質問の趣旨とはずれてしまいますが、住所の番地を漢数字に直すということの目的が、
なんらかの形で印刷を行なうことにあるならば、レポート、あるいは、一覧表印刷の属性で、
印刷時に自動的に漢数字に変換することができるので、ご検討なさってはいかがでしょうか?
表に入力するデータそのものを漢数字で行なうということになると、ソートや選択の際に、
かえって面倒なことになってしまうのではないかと思います。
(ただし、一覧表印刷の方では、縦書きの時しか、漢数字変換はできないかもしれません)

桐のレポート印刷の柔軟さには、いつも感動させられています。
#SP6 から、レポートでも文字数があふれるときの自動縮小が
#できるようになったので、鬼に金棒です。
年賀状の宛名縦書き印刷なんかも、年賀状ソフトを使わないでも、桐で簡単にできてしまうのですから。

上田さんが印刷時の漢数字変換のことをご存知で、そういうことではないのだという場合は失礼。

9305 不可能だからなのでしょう 佐田 守弘 2001/01/12-19:03
記事番号9297へのコメント
上田さん
>正直予想もしない返答に戸惑っています。
>あって然るべき関数ではないのでしょうか。
私も最初は一瞬そう思いました。
で、私の#9278を見て頂けば分かったと思うのですが、漢字表記からアラビア数字への逆変換は、
関数として完成させるには、変換すべきかどうかの判断も含めて、余りにも複雑であり、
実質的に不可能であるためだと思います。

不完全な変換であれば、コメントツリーに書いてあるような#文字置換関数を使う方法で、変換が可能です。
おそらくそれで一般的な場合には充分なのでしょう。

ただし、完全を期すると、これでは全く意味をなさないことが分かるでしょう。
そして漢数字からアラビア数字への逆変換そのものがアルゴリズムとして成り立たない分かって来ます。
その理由をもう一度述べますと、
@漢字表記の方式は唯一でなく、これらが混在する場合すらある。
ただし、それは逆変換がきわめて複雑になるだけで、逆変換する事自体は不可能ではありません。
A逆変換すべきかどうか自動判断できないため、逆変換関数を作ると、却って混乱を発生する。
おそらくこれが本当の理由でしょう。
例えば、次の3つの記述1番街、一番街、壱番街は、どれも実在です。
つまり、それが住居表示であったとしても、「一番街」ないし、「壱番街」を「1番街」と逆変換してしまったら、誤りです。

これは単なる一例ですが、仮名漢字変換辞書、および郵便番号データを詳細に調べると、
この様な例が多数ある事が分かるはずです。
このために、唯一に関数として逆変換できないのです。
ですから一般論として漢字表記をアラビア数字表記に逆変換関数を作る事はできないわけです。


9307 再度ありがとうございます。 上田 2001/01/12-22:13
記事番号9305へのコメント
佐田さんの解説で、考えていたよりかなり複雑な要求だということがよく分かりました。
また、宮城さんの方法もこれでやっと理解できました。ありがとうございました。

大川さんの方法でやるのが一番安全のようですね。
でも、横書きでも出来るようにして欲しいですね。

戻る