みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FileMakerpro12 Mac環境です。
住所の丁目、番地等の漢数字変換について教えていただきたいことがあります。
例えば「2−30−400」or「2丁目30番400」の場合「二−三十−四〇〇」or「二丁目三十番四〇〇」と言う風に漢数字変換したく、
kanjiNumeralを使用すれば二桁数字が「三十」ではなく「三〇」になってしまいます。
どのようにすれば望むような漢数字変換できるのでしょうか?
よろしくお願いします。
Last edited by まさたか (2020-07-16 15:12:50)
Offline
30 → 三十
400 → 四〇〇
これって、一貫性がないですよね。
三十
四百
とそろえていいのなら
NumToJText
でできますが。。
Offline
ああ、それにしても、
数字だけ抜き出して変換しないといけないからかなり面倒なことですよ。
Offline
チポさん
はがき用の印字データとして使用したいのでNumToJTextで「四百」ではダメなのですよ。
単純に二桁の数字だけを「十」「十五」「三十」「六十五」って変換が理想なのですが
Offline
私にはこれ以上お答えできません、申し訳ありません-_-
私のところではハガキ・封書の宛名書き全て横書きにしてますよ。
Offline
While (
[
txt = Substitute (
text ;
[ "0" ; "0" ];[ "1" ; "1" ];[ "2" ; "2" ];[ "3" ; "3" ];[ "4" ; "4" ];[ "5" ; "5" ];[ "6" ; "6" ];[ "7" ; "7" ];[ "8" ; "8" ];[ "9" ; "9" ]
) ;
txt = Substitute ( TrimAll ( txt ; 0 ; 1 ) ; " " ; ¶ ) ;
txt0 = ""
] ;
not IsEmpty ( txt ) ;
[
txt1 = GetValue ( txt ; 1 ) ;
txt0 = txt0 & Case ( Length ( txt1 ) ≥ 3 ; KanjiNumeral ( txt1 ) ; NumToJText ( txt1 ; 3 ; 2 ) ) ;
txt = RightValues ( txt ; ValueCount ( txt ) - 1 )
] ;
txt0
)でいけそう。FM18以降です。それ以前も、Evaluate() 使った再帰式でロジック組めますので、御自分で考えてください。
問題は、ー です。似たものがたくさんあるので、縦書きできなかったり、数式のマイナスと見なされて消えたりしますので、全角のハイフンに統一させる必要があります。
また、部屋番号にみられる A101 などは考慮していません。
Last edited by Shin (2020-07-17 16:01:57)
Offline
チポさん
ありがとうございます
Shinさん
お答えありがとうございます。なかなかレベルが高くて・・・
Evaluate() 使った再帰式って未経験ですので少しずつ確認しながらできるのかチャレンジしてみます
Offline
教えていただいたことが自身の能力ではいまいちFM18以前環境で再現が難しいかったので、以下のように考えてみてできないのか?というとこにたどり着きました
「2−30−400」「2丁目30番400」をkanjiNumeralで「二−三〇−四〇〇」「二丁目三〇番四〇〇」にしてから、二桁漢数字だけを選ぶことができれば、あとはSubstituteで[ "一〇" ; "十" ];[ "一一" ; "十一" ]・・・・[ "二〇" ; "二十" ];[ "二一" ; "二十一" ]・・・[ "九九" ; "九十九" ]で可能ではないか?
そのような考えのもと、現状二桁漢数字だけを選ぶという方法で現状足止めされています。
漢数字なので十の位「,一,二,三,四,五,六,七,八,九」と一の位「〇,一,二,三,四,五,六,七,八,九」の組み合わせで、漢数字が3連続でないものという条件で確実に二桁漢数字を掴めそうなのですが、これがなかなかどうすれば良いのかわかりませんのでご教授頂きたいです。
よろしくお願いいたします
Offline
住所なら四百で届くのでは?
FM8以降で、
Let(
[
txt = Substitute (
text ;
[ "0" ; "0" ];[ "1" ; "1" ];[ "2" ; "2" ];[ "3" ; "3" ];[ "4" ; "4" ];[ "5" ; "5" ];[ "6" ; "6" ];[ "7" ; "7" ];[ "8" ; "8" ];[ "9" ; "9" ]
) ;
$txt = Substitute ( TrimAll ( txt ; 0 ; 1 ) ; " " ; ¶ ) ;
$txt0 = "" ;
$rec =
"Case(
IsEmpty ( $txt ) ; $txt0 ;
Let(
[
$txt1 = GetValue ( $txt ; 1 ) ;
$txt0 = $txt0 & Case ( Length ( $txt1 ) ≥ 3 ; KanjiNumeral ( $txt1 ) ; NumToJText ( $txt1 ; 3 ; 2 ) ) ;
$txt = RightValues ( $txt ; ValueCount ( $txt ) - 1 )
] ;
Evaluate ( $rec )
)
)"
];
Evaluate ( $rec )
)Last edited by Shin (2020-07-20 11:54:33)
Offline
Shinさん
ありがとうございます。望み通りの結果になりました。
ある程度まで同様に書き上げたのですが「"Case(」を使うことが気が付かずでした。
Offline
Pages: 1
[ Generated in 0.007 seconds, 8 queries executed - Memory usage: 565.86 KiB (Peak: 570.74 KiB) ]