JTextToNumToThou 関数
カテゴリー : テキスト処理計算結果のデータタイプ : 数字
対応FileMakerバージョン :
作者 : 社本修司 株式会社ジェネコム
概要
千の位までの<漢数字>を<数値>に変換します構文
JTextToNumToThou ( 漢数字 )
引数
| 引数名 | タイプ | 備考 | 例 |
|---|---|---|---|
| 漢数字 | テキスト | 零から千の位までの漢数字 | 九阡伍拾壱 |
例
JTextToNumToThou ( "九阡伍拾壱" )
結果
9051
式
/*
JTextToNumToThou ( 漢数字 )
JTextToNum 関数のサブ関数です。
千の位までの<漢数字>を<数値>に変換します。
*/
Let (
[
KANJINUM =
Substitute (
RomanHankaku ( 漢数字 ) ;
[ "仟" ; "千" ] ; [ "阡" ; "千" ] ;
[ "皕" ; "二百" ] ;
[ "佰" ; "百" ] ; [ "陌" ; "百" ] ;
[ "卅" ; "三十" ] ; [ "丗" ; "三十" ] ;
[ "廿" ; "二十" ] ;
[ "拾" ; "十" ] ;
[ "玖" ; "九" ] ; [ "九" ; "9" ] ;
[ "捌" ; "八" ] ; [ "八" ; "8" ] ;
[ "柒" ; "七" ] ; [ "漆" ; "七" ] ; [ "七" ; "7" ] ;
[ "陸" ; "六" ] ; [ "六" ; "6" ] ;
[ "伍" ; "五" ] ; [ "五" ; "5" ] ;
[ "亖" ; "四" ] ; [ "肆" ; "四" ] ; [ "四" ; "4" ] ;
[ "参" ; "三" ] ; [ "參" ; "三" ] ; [ "三" ; "3" ] ;
[ "弐" ; "二" ] ; [ "貳" ; "二" ] ; [ "二" ; "2" ] ;
[ "壱" ; "一" ] ; [ "弌" ; "一" ] ; [ "壹" ; "一" ] ; [ "一" ; "1" ] ;
[ "零" ; "〇" ] ; [ "〇" ; "0" ] ;
[ "点" ; "." ] ; [ "." ; "." ] ; // 小数点の点
[ "、" ; "" ] ; [ "," ; "" ] ; [ "," ; "" ] // 位取りのコンマ
) ;
SEN = // 位の文字迄をテキストとして抽出
Case (
PatternCount ( KANJINUM ; "千" ) ;
Left ( KANJINUM ; Position ( KANJINUM ; "千" ; 1 ; 1 ) ) ;
) ;
KANJINUM_3 = // 次の位で使うために位の文字以下の文字列を抽出
Right ( KANJINUM ; Length ( KANJINUM ) - Position ( KANJINUM ; "千" ; 1 ; 1 ) ) ;
HYAKU =
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 ) ) ;
JUU =
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
] ;
// それぞれの位毎に数値化し、その値を足して結果をだす
// JTextToNum 関数で使われる文字も含め想定した文字以外が入っている場合は結果を返さない
Case (
not IsEmpty ( KANJINUM ) and
Exact (
KANJINUM ;
Filter ( KANJINUM ; "数極載正潤澗溝穣穰し秭垓京兆億萬万仟阡千皕佰陌百卅丗廿拾十玖九捌八柒漆七陸六伍五亖肆四参參三弐貳二壱弌壹一零〇点.、,9876543210.-+, " )
) ;
Case ( SEN = "千" ; 1 ; GetAsNumber ( SEN ) ) * 10^3 +
Case ( HYAKU = "百" ; 1 ; GetAsNumber ( HYAKU ) ) * 10^2 +
Case ( JUU = "十" ; 1 ; GetAsNumber ( JUU ) ) * 10^1 +
GetAsNumber ( ICHI ) * 1
)
)
JTextToNumToThou ( 漢数字 )
JTextToNum 関数のサブ関数です。
千の位までの<漢数字>を<数値>に変換します。
*/
Let (
[
KANJINUM =
Substitute (
RomanHankaku ( 漢数字 ) ;
[ "仟" ; "千" ] ; [ "阡" ; "千" ] ;
[ "皕" ; "二百" ] ;
[ "佰" ; "百" ] ; [ "陌" ; "百" ] ;
[ "卅" ; "三十" ] ; [ "丗" ; "三十" ] ;
[ "廿" ; "二十" ] ;
[ "拾" ; "十" ] ;
[ "玖" ; "九" ] ; [ "九" ; "9" ] ;
[ "捌" ; "八" ] ; [ "八" ; "8" ] ;
[ "柒" ; "七" ] ; [ "漆" ; "七" ] ; [ "七" ; "7" ] ;
[ "陸" ; "六" ] ; [ "六" ; "6" ] ;
[ "伍" ; "五" ] ; [ "五" ; "5" ] ;
[ "亖" ; "四" ] ; [ "肆" ; "四" ] ; [ "四" ; "4" ] ;
[ "参" ; "三" ] ; [ "參" ; "三" ] ; [ "三" ; "3" ] ;
[ "弐" ; "二" ] ; [ "貳" ; "二" ] ; [ "二" ; "2" ] ;
[ "壱" ; "一" ] ; [ "弌" ; "一" ] ; [ "壹" ; "一" ] ; [ "一" ; "1" ] ;
[ "零" ; "〇" ] ; [ "〇" ; "0" ] ;
[ "点" ; "." ] ; [ "." ; "." ] ; // 小数点の点
[ "、" ; "" ] ; [ "," ; "" ] ; [ "," ; "" ] // 位取りのコンマ
) ;
SEN = // 位の文字迄をテキストとして抽出
Case (
PatternCount ( KANJINUM ; "千" ) ;
Left ( KANJINUM ; Position ( KANJINUM ; "千" ; 1 ; 1 ) ) ;
) ;
KANJINUM_3 = // 次の位で使うために位の文字以下の文字列を抽出
Right ( KANJINUM ; Length ( KANJINUM ) - Position ( KANJINUM ; "千" ; 1 ; 1 ) ) ;
HYAKU =
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 ) ) ;
JUU =
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
] ;
// それぞれの位毎に数値化し、その値を足して結果をだす
// JTextToNum 関数で使われる文字も含め想定した文字以外が入っている場合は結果を返さない
Case (
not IsEmpty ( KANJINUM ) and
Exact (
KANJINUM ;
Filter ( KANJINUM ; "数極載正潤澗溝穣穰し秭垓京兆億萬万仟阡千皕佰陌百卅丗廿拾十玖九捌八柒漆七陸六伍五亖肆四参參三弐貳二壱弌壹一零〇点.、,9876543210.-+, " )
) ;
Case ( SEN = "千" ; 1 ; GetAsNumber ( SEN ) ) * 10^3 +
Case ( HYAKU = "百" ; 1 ; GetAsNumber ( HYAKU ) ) * 10^2 +
Case ( JUU = "十" ; 1 ; GetAsNumber ( JUU ) ) * 10^1 +
GetAsNumber ( ICHI ) * 1
)
)
エンコードは Unicode (UTF-8)、改行タイプは LF (Unix) 形式のテキストとして保存します。
テキストエディタで正常に開かない場合は、エンコードを指定してファイルを開くようにしてください。
詳細説明
JTextToNum 関数のサブ関数です。千の位までの<漢数字>を<数値>に変換します。
この関数が使用する他のカスタム関数
- なし
この関数を使用する他のカスタム関数
- JTextToNum 関数
フィードバック
この関数について何かお気づきの点がありましたら、お気づきの点、ご意見、ご感想などをお知らせください。FMPro.jp 事務局経由でカスタム関数の作者に転送させていただきます。なお、いただいたフィードバックにつきましては、FMPro.jp 事務局から個別にご返信を差し上げておりません。あらかじめご了承いただくようお願いいたします。
注意:ここで紹介されているカスタム関数をご自分のシステムに組み込んだ場合に発生した問題についてはFMPro.jpは責任を負いません。