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

TextExtraction 関数

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

概要

指定したテキストから任意のテキスト間の文字列を返します。

構文

TextExtraction ( テキスト ; 開始テキスト ; 開始テキスト回数 ; 終了テキスト ; 終了テキスト回数 )

引数

引数名タイプ備考
テキストテキスト 商品番号: 0001
商 品 名 : りんご
価  格: 200円
商品番号: 0002
商 品 名 : 梨
価  格: 100円
開始テキストテキスト 商 品 名 :
開始テキスト回数数字開始テキストの何回目かの数値2
終了テキストテキスト 
終了テキスト回数数字終了テキストの何回目かの数値1

別のウィンドウで、引数の値を変更してテストすることが出来ます

TextExtraction ( "商品番号: 0001¶商 品 名 : りんご¶価  格: 200円¶商品番号: 0002¶商 品 名 : 梨¶価  格: 100円" ; "商 品 名 : " ; 2 ; "¶" ; 1 )

結果

/*==============================================================

  カスタム関数    TextExtraction ( テキスト ; 開始テキスト ; 開始テキスト回数 ; 終了テキスト ; 終了テキスト回数 )

  指定したテキストから任意のテキスト間の文字列を返します。
  <テキスト>の中から指定された<開始テキスト回数>番目の<開始テキスト>の次の文字列から
  その開始テキスト以降に現れる<終了テキスト回数>番目の<終了テキスト>までの文字列を返します。

=============================================================*/


Let
(
    [
    TEXT = テキスト;
    STARTINGTEXT = 開始テキスト ;
    NUMBEROFSTARTINGTEXTS = 開始テキスト回数 ;  
    ENDINGTEXT = 終了テキスト ;
    // 終了テキストが開始テキストに含まれている場合その数だけをプラス
    NUMBEROFENDINGTEXTS = 終了テキスト回数  + PatternCount ( STARTINGTEXT ; 終了テキスト ) ;

    //----------------------------------------------------------------------
    // 抽出するテキストの先頭文字位置
    //----------------------------------------------------------------------
    SP = Position ( TEXT ; STARTINGTEXT ; 1 ; NUMBEROFSTARTINGTEXTS ) + Length ( STARTINGTEXT ) ;

    //----------------------------------------------------------------------
    // 終了テキストの文字位置
    //----------------------------------------------------------------------
    EP = Position ( TEXT ; ENDINGTEXT ; Position ( TEXT; STARTINGTEXT; 1; NUMBEROFSTARTINGTEXTS ) ; NUMBEROFENDINGTEXTS ) ;

    //----------------------------------------------------------------------
    // 抽出するテキストの文字数
    //----------------------------------------------------------------------
    NC = EP - SP

    ] ;

   Case (

        // Text中にstartingTextがNumberOfStartingTexts回以上存在するか
        // StartingText以降のText中にEndingTextが終了テキスト回数以上存在するか
        // (NumberOfEndingTexts回ではなく終了テキスト回数)

       PatternCount ( TEXT ; STARTINGTEXT ) ≥ NUMBEROFSTARTINGTEXTS
        and PatternCount ( Middle ( TEXT ; SP ; Length ( TEXT ) - SP + 1 ) ; ENDINGTEXT ) ≥ 終了テキスト回数 ;
        
           Middle ( TEXT ; SP ; NC )
    )
)

// ©2004,SHAMOTO Syuji <http://www.FMPro.jp>

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

詳細説明

指定したテキストから任意のテキスト間の文字列を返します。
<テキスト>の中から指定された<開始テキスト回数>番目の<開始テキスト>の次の文字列から
その開始テキスト以降に現れる<終了テキスト回数>番目の<終了テキスト>までの文字列を返します。

Tips: 抽出したいテキストが文末にくる場合に備えて、引数の<テキスト>に<終了テキスト>を<終了テキスト回数>回だけ足しておくと抽出したいテキストの位置を気にしなくてもすみます。
例)上記例の場合、<テキスト> & "¶" にしておけば、TextExtraction ( <テキスト> & "¶" ; "価  格: " ; 2 ; "¶" ; 1 ) でも「100円」がかえってきます。
Tips:

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

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

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

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