JTextToNum 関数
カテゴリー : テキスト処理計算結果のデータタイプ : 数字
対応FileMakerバージョン :










作者 : 社本修司 株式会社ジェネコム
概要
零から極(10^48)までの<漢数字>を<数値>に変換します構文
JTextToNum ( 漢数字 )
引数
引数名 | タイプ | 備考 | 例 |
---|---|---|---|
漢数字 | テキスト | 零から垓(10^20)までの漢数字 | 弐拾億参阡六陌伍拾弐萬壱阡八陌壱 |
例
JTextToNum ( "弐拾億参阡六陌伍拾弐萬壱阡八陌壱" )
結果
2036521801
式
/*
JTextToNum ( 漢数字 )
零から極(10^48)までの<漢数字>を<数値>に変換します。
分・厘・毛 といった小数は変換できません。
サブ関数の JTextToNumToThou 関数が必要です。
*/
Let (
[
KANJINUM =
Substitute (
RomanHankaku ( 漢数字 ) ;
[ "数" ; "極" ] ;
[ "潤" ; "澗" ] ;
[ "穣" ; "穰" ] ;
[ "し" ; "秭" ] ; [ "" ; "秭" ] ;
// NumToJText 関数では"し"となるのでここでもひらがなを考慮する
// "" は禾(のぎへん)に予
[ "萬" ; "万" ]
) ;
GOKU = // 単位の文字迄をテキストとして抽出
Case (
PatternCount ( KANJINUM ; "極" ) ;
Left ( KANJINUM ; Position ( KANJINUM ; "極" ; 1 ; 1 ) ) ;
) ;
KANJINUM_12 = // 次の単位で使うために単位の文字以下の文字列を抽出
Right ( KANJINUM ; Length ( KANJINUM ) - Position ( KANJINUM ; "極" ; 1 ; 1 ) ) ;
SAI =
Case (
PatternCount ( KANJINUM_12 ; "載" ) ;
Left ( KANJINUM_12 ; Position ( KANJINUM_12 ; "載" ; 1 ; 1 ) ) ;
) ;
KANJINUM_11 =
Right ( KANJINUM_12 ; Length ( KANJINUM_12 ) - Position ( KANJINUM_12 ; "載" ; 1 ; 1 ) ) ;
SEI =
Case (
PatternCount ( KANJINUM_11 ; "正" ) ;
Left ( KANJINUM_11 ; Position ( KANJINUM_11 ; "正" ; 1 ; 1 ) ) ;
) ;
KANJINUM_10 =
Right ( KANJINUM_11 ; Length ( KANJINUM_11 ) - Position ( KANJINUM_11 ; "正" ; 1 ; 1 ) ) ;
KAN =
Case (
PatternCount ( KANJINUM_10 ; "澗" ) ;
Left ( KANJINUM_10 ; Position ( KANJINUM_10 ; "澗" ; 1 ; 1 ) ) ;
) ;
KANJINUM_9 =
Right ( KANJINUM_10 ; Length ( KANJINUM_10 ) - Position ( KANJINUM_10 ; "澗" ; 1 ; 1 ) ) ;
KOU =
Case (
PatternCount ( KANJINUM_9 ; "溝" ) ;
Left ( KANJINUM_9 ; Position ( KANJINUM_9 ; "溝" ; 1 ; 1 ) ) ;
) ;
KANJINUM_8 =
Right ( KANJINUM_9 ; Length ( KANJINUM_9 ) - Position ( KANJINUM_9 ; "溝" ; 1 ; 1 ) ) ;
JYOU =
Case (
PatternCount ( KANJINUM_8 ; "穰" ) ;
Left ( KANJINUM_8 ; Position ( KANJINUM_8 ; "穰" ; 1 ; 1 ) ) ;
) ;
KANJINUM_7 =
Right ( KANJINUM_8 ; Length ( KANJINUM_8 ) - Position ( KANJINUM_8 ; "穰" ; 1 ; 1 ) ) ;
SHI =
Case (
PatternCount ( KANJINUM_7 ; "秭" ) ;
Left ( KANJINUM_7 ; Position ( KANJINUM_7 ; "秭" ; 1 ; 1 ) ) ;
) ;
KANJINUM_6 =
Right ( KANJINUM_7 ; Length ( KANJINUM_7 ) - Position ( KANJINUM_7 ; "秭" ; 1 ; 1 ) ) ;
GAI =
Case (
PatternCount ( KANJINUM_6 ; "垓" ) ;
Left ( KANJINUM_6 ; Position ( KANJINUM_6 ; "垓" ; 1 ; 1 ) ) ;
) ;
KANJINUM_5 =
Right ( KANJINUM_6 ; Length ( KANJINUM_6 ) - Position ( KANJINUM_6 ; "垓" ; 1 ; 1 ) ) ;
KEI =
Case (
PatternCount ( KANJINUM_5 ; "京" ) ;
Left ( KANJINUM_5 ; Position ( KANJINUM_5 ; "京" ; 1 ; 1 ) ) ;
) ;
KANJINUM_4 =
Right ( KANJINUM_5 ; Length ( KANJINUM_5 ) - Position ( KANJINUM_5 ; "京" ; 1 ; 1 ) ) ;
CHOU =
Case (
PatternCount ( KANJINUM_4 ; "兆" ) ;
Left ( KANJINUM_4 ; Position ( KANJINUM_4 ; "兆" ; 1 ; 1 ) ) ;
) ;
KANJINUM_3 =
Right ( KANJINUM_4 ; Length ( KANJINUM_4 ) - Position ( KANJINUM_4 ; "兆" ; 1 ; 1 ) ) ;
OKU =
Case (
PatternCount ( KANJINUM_3 ; "億" ) ;
Left ( KANJINUM_3 ; Position ( KANJINUM_3 ; "億" ; 1 ; 1 ) ) ;
) ;
KANJINUM_2 =
Right ( KANJINUM_3 ; Length ( KANJINUM_3 ) - Position ( KANJINUM_3 ; "億" ; 1 ; 1 ) ) ;
MAN =
Case (
PatternCount ( KANJINUM_2 ; "万" ) ;
Left ( KANJINUM_2 ; Position ( KANJINUM_2 ; "万" ; 1 ; 1 ) ) ;
) ;
KANJINUM_1 =
Right ( KANJINUM_2 ; Length ( KANJINUM_2 ) - Position ( KANJINUM_2 ; "万" ; 1 ; 1 ) ) ;
ICHI = KANJINUM_1
] ;
// それぞれの単位毎に JTextToNumToThou 関数で数値化し、その値を足して結果をだす
// 想定した文字以外が入っている場合は結果を返さない
Case (
not IsEmpty ( KANJINUM ) and
Exact (
KANJINUM ;
Filter ( KANJINUM ; "数極載正潤澗溝穣穰し秭垓京兆億萬万仟阡千皕佰陌百卅丗廿拾十玖九捌八柒漆七陸六伍五亖肆四参參三弐貳二壱弌壹一零〇点.、,9876543210.-+, " )
) ;
Case ( GOKU = "極" ; 1 ; GetAsNumber ( JTextToNumToThou ( GOKU ) ) ) * 10^48 +
Case ( SAI = "載" ; 1 ; GetAsNumber ( JTextToNumToThou ( SAI ) ) ) * 10^44 +
Case ( SEI = "正" ; 1 ; GetAsNumber ( JTextToNumToThou ( SEI ) ) ) * 10^40 +
Case ( KAN = "澗" ; 1 ; GetAsNumber ( JTextToNumToThou ( KAN ) ) ) * 10^36 +
Case ( KOU = "溝" ; 1 ; GetAsNumber ( JTextToNumToThou ( KOU ) ) ) * 10^32 +
Case ( JYOU = "穣" ; 1 ; GetAsNumber ( JTextToNumToThou ( JYOU ) ) ) * 10^28 +
Case ( SHI = "秭" ; 1 ; GetAsNumber ( JTextToNumToThou ( SHI ) ) ) * 10^24 +
Case ( GAI = "垓" ; 1 ; GetAsNumber ( JTextToNumToThou ( GAI ) ) ) * 10^20 +
Case ( KEI = "京" ; 1 ; GetAsNumber ( JTextToNumToThou ( KEI ) ) ) * 10^16 +
Case ( CHOU = "兆" ; 1 ; GetAsNumber ( JTextToNumToThou ( CHOU ) ) ) * 10^12 +
Case ( OKU = "億" ; 1 ; GetAsNumber ( JTextToNumToThou ( OKU ) ) ) * 10^8 +
Case ( MAN = "万" ; 1 ; GetAsNumber ( JTextToNumToThou ( MAN ) ) ) * 10^4 +
JTextToNumToThou ( ICHI ) * 1
)
)
JTextToNum ( 漢数字 )
零から極(10^48)までの<漢数字>を<数値>に変換します。
分・厘・毛 といった小数は変換できません。
サブ関数の JTextToNumToThou 関数が必要です。
*/
Let (
[
KANJINUM =
Substitute (
RomanHankaku ( 漢数字 ) ;
[ "数" ; "極" ] ;
[ "潤" ; "澗" ] ;
[ "穣" ; "穰" ] ;
[ "し" ; "秭" ] ; [ "" ; "秭" ] ;
// NumToJText 関数では"し"となるのでここでもひらがなを考慮する
// "" は禾(のぎへん)に予
[ "萬" ; "万" ]
) ;
GOKU = // 単位の文字迄をテキストとして抽出
Case (
PatternCount ( KANJINUM ; "極" ) ;
Left ( KANJINUM ; Position ( KANJINUM ; "極" ; 1 ; 1 ) ) ;
) ;
KANJINUM_12 = // 次の単位で使うために単位の文字以下の文字列を抽出
Right ( KANJINUM ; Length ( KANJINUM ) - Position ( KANJINUM ; "極" ; 1 ; 1 ) ) ;
SAI =
Case (
PatternCount ( KANJINUM_12 ; "載" ) ;
Left ( KANJINUM_12 ; Position ( KANJINUM_12 ; "載" ; 1 ; 1 ) ) ;
) ;
KANJINUM_11 =
Right ( KANJINUM_12 ; Length ( KANJINUM_12 ) - Position ( KANJINUM_12 ; "載" ; 1 ; 1 ) ) ;
SEI =
Case (
PatternCount ( KANJINUM_11 ; "正" ) ;
Left ( KANJINUM_11 ; Position ( KANJINUM_11 ; "正" ; 1 ; 1 ) ) ;
) ;
KANJINUM_10 =
Right ( KANJINUM_11 ; Length ( KANJINUM_11 ) - Position ( KANJINUM_11 ; "正" ; 1 ; 1 ) ) ;
KAN =
Case (
PatternCount ( KANJINUM_10 ; "澗" ) ;
Left ( KANJINUM_10 ; Position ( KANJINUM_10 ; "澗" ; 1 ; 1 ) ) ;
) ;
KANJINUM_9 =
Right ( KANJINUM_10 ; Length ( KANJINUM_10 ) - Position ( KANJINUM_10 ; "澗" ; 1 ; 1 ) ) ;
KOU =
Case (
PatternCount ( KANJINUM_9 ; "溝" ) ;
Left ( KANJINUM_9 ; Position ( KANJINUM_9 ; "溝" ; 1 ; 1 ) ) ;
) ;
KANJINUM_8 =
Right ( KANJINUM_9 ; Length ( KANJINUM_9 ) - Position ( KANJINUM_9 ; "溝" ; 1 ; 1 ) ) ;
JYOU =
Case (
PatternCount ( KANJINUM_8 ; "穰" ) ;
Left ( KANJINUM_8 ; Position ( KANJINUM_8 ; "穰" ; 1 ; 1 ) ) ;
) ;
KANJINUM_7 =
Right ( KANJINUM_8 ; Length ( KANJINUM_8 ) - Position ( KANJINUM_8 ; "穰" ; 1 ; 1 ) ) ;
SHI =
Case (
PatternCount ( KANJINUM_7 ; "秭" ) ;
Left ( KANJINUM_7 ; Position ( KANJINUM_7 ; "秭" ; 1 ; 1 ) ) ;
) ;
KANJINUM_6 =
Right ( KANJINUM_7 ; Length ( KANJINUM_7 ) - Position ( KANJINUM_7 ; "秭" ; 1 ; 1 ) ) ;
GAI =
Case (
PatternCount ( KANJINUM_6 ; "垓" ) ;
Left ( KANJINUM_6 ; Position ( KANJINUM_6 ; "垓" ; 1 ; 1 ) ) ;
) ;
KANJINUM_5 =
Right ( KANJINUM_6 ; Length ( KANJINUM_6 ) - Position ( KANJINUM_6 ; "垓" ; 1 ; 1 ) ) ;
KEI =
Case (
PatternCount ( KANJINUM_5 ; "京" ) ;
Left ( KANJINUM_5 ; Position ( KANJINUM_5 ; "京" ; 1 ; 1 ) ) ;
) ;
KANJINUM_4 =
Right ( KANJINUM_5 ; Length ( KANJINUM_5 ) - Position ( KANJINUM_5 ; "京" ; 1 ; 1 ) ) ;
CHOU =
Case (
PatternCount ( KANJINUM_4 ; "兆" ) ;
Left ( KANJINUM_4 ; Position ( KANJINUM_4 ; "兆" ; 1 ; 1 ) ) ;
) ;
KANJINUM_3 =
Right ( KANJINUM_4 ; Length ( KANJINUM_4 ) - Position ( KANJINUM_4 ; "兆" ; 1 ; 1 ) ) ;
OKU =
Case (
PatternCount ( KANJINUM_3 ; "億" ) ;
Left ( KANJINUM_3 ; Position ( KANJINUM_3 ; "億" ; 1 ; 1 ) ) ;
) ;
KANJINUM_2 =
Right ( KANJINUM_3 ; Length ( KANJINUM_3 ) - Position ( KANJINUM_3 ; "億" ; 1 ; 1 ) ) ;
MAN =
Case (
PatternCount ( KANJINUM_2 ; "万" ) ;
Left ( KANJINUM_2 ; Position ( KANJINUM_2 ; "万" ; 1 ; 1 ) ) ;
) ;
KANJINUM_1 =
Right ( KANJINUM_2 ; Length ( KANJINUM_2 ) - Position ( KANJINUM_2 ; "万" ; 1 ; 1 ) ) ;
ICHI = KANJINUM_1
] ;
// それぞれの単位毎に JTextToNumToThou 関数で数値化し、その値を足して結果をだす
// 想定した文字以外が入っている場合は結果を返さない
Case (
not IsEmpty ( KANJINUM ) and
Exact (
KANJINUM ;
Filter ( KANJINUM ; "数極載正潤澗溝穣穰し秭垓京兆億萬万仟阡千皕佰陌百卅丗廿拾十玖九捌八柒漆七陸六伍五亖肆四参參三弐貳二壱弌壹一零〇点.、,9876543210.-+, " )
) ;
Case ( GOKU = "極" ; 1 ; GetAsNumber ( JTextToNumToThou ( GOKU ) ) ) * 10^48 +
Case ( SAI = "載" ; 1 ; GetAsNumber ( JTextToNumToThou ( SAI ) ) ) * 10^44 +
Case ( SEI = "正" ; 1 ; GetAsNumber ( JTextToNumToThou ( SEI ) ) ) * 10^40 +
Case ( KAN = "澗" ; 1 ; GetAsNumber ( JTextToNumToThou ( KAN ) ) ) * 10^36 +
Case ( KOU = "溝" ; 1 ; GetAsNumber ( JTextToNumToThou ( KOU ) ) ) * 10^32 +
Case ( JYOU = "穣" ; 1 ; GetAsNumber ( JTextToNumToThou ( JYOU ) ) ) * 10^28 +
Case ( SHI = "秭" ; 1 ; GetAsNumber ( JTextToNumToThou ( SHI ) ) ) * 10^24 +
Case ( GAI = "垓" ; 1 ; GetAsNumber ( JTextToNumToThou ( GAI ) ) ) * 10^20 +
Case ( KEI = "京" ; 1 ; GetAsNumber ( JTextToNumToThou ( KEI ) ) ) * 10^16 +
Case ( CHOU = "兆" ; 1 ; GetAsNumber ( JTextToNumToThou ( CHOU ) ) ) * 10^12 +
Case ( OKU = "億" ; 1 ; GetAsNumber ( JTextToNumToThou ( OKU ) ) ) * 10^8 +
Case ( MAN = "万" ; 1 ; GetAsNumber ( JTextToNumToThou ( MAN ) ) ) * 10^4 +
JTextToNumToThou ( ICHI ) * 1
)
)
エンコードは Unicode (UTF-8)、改行タイプは LF (Unix) 形式のテキストとして保存します。
テキストエディタで正常に開かない場合は、エンコードを指定してファイルを開くようにしてください。
詳細説明
零から極(10^48)までの<漢数字>を<数値>に変換します。分・厘・毛 といった小数は変換できません。
また、漢数字以外の文字列が引数に与えられると結果を返しません。ですから文中の漢数字を一括してアラビア数字に変換するような場合には使用できません。
サブ関数の JTextToNumToThou 関数が必要です。
この関数が使用する他のカスタム関数
この関数を使用する他のカスタム関数
- なし
フィードバック
この関数について何かお気づきの点がありましたら、お気づきの点、ご意見、ご感想などをお知らせください。FMPro.info 事務局経由でカスタム関数の作者に転送させていただきます。なお、いただいたフィードバックにつきましては、FMPro.info 事務局から個別にご返信を差し上げておりません。あらかじめご了承いただくようお願いいたします。
注意:ここで紹介されているカスタム関数をご自分のシステムに組み込んだ場合に発生した問題についてはFMPro.infoは責任を負いません。