http://FMPro.info  FileMaker Pro 関連総合ポータルサイト

JTextToNum 関数

カテゴリー : テキスト処理
計算結果のデータタイプ : 数字
対応FileMakerバージョン : 対応 7  対応 8  対応 8.5  対応 9  対応 10  対応 11  未対応 12  未対応 13  未対応 14  未対応 15
作者 : 社本修司 株式会社ジェネコム

概要

零から極(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
    )
)

エンコードは Unicode (UTF-8)、改行タイプは LF (Unix) 形式のテキストとして保存します。
テキストエディタで正常に開かない場合は、エンコードを指定してファイルを開くようにしてください。

詳細説明

零から極(10^48)までの<漢数字>を<数値>に変換します。
分・厘・毛 といった小数は変換できません。
また、漢数字以外の文字列が引数に与えられると結果を返しません。ですから文中の漢数字を一括してアラビア数字に変換するような場合には使用できません。
サブ関数の JTextToNumToThou 関数が必要です。

この関数が使用する他のカスタム関数

この関数を使用する他のカスタム関数

注意:ここで紹介されているカスタム関数をご自分のシステムに組み込んだ場合に発生した問題についてはFMPro.infoは責任を負いません。

Copyright © 2004-2009 FMPro.info All Rights Reserved.