文字列関数 (String Functions)

次の表に掲げる文字列関数はトランスフォーマーのパラメーターとして設定する式の中で使用することができ、ワークスペースの実行時、そのトランスフォーマーにフィーチャーが入力される度に実行されます。

これらの関数は、テキストエディタ (Text Editor) や数式エディタ (Arithmetic Editor) の編集画面でのキー入力の他、エディタ左側の 文字列関数 (String Functions) セクションに表示されている関数名のダブルクリック、または、ドラッグ&ドロップによって編集中の式に挿入することができます。ただし、数式で使用できる文字列関数は数値を返すものに限られます。これらの関数の使用にあたっては表の下の説明をよくお読みください。

なお、ほとんどの文字列関数には代替可能なトランスフォーマーがありますので、初心者のうちはトランスフォーマーの方を利用することをお勧めします。

@ConvertEncoding(string encoding, string str, [bool useBytes])
str に指定した文字列 (またはそのバイト列) を encoding に指定したエンコーディングでエンコードした文字列を返す。encoding に指定可能なエンコーディング名は、AttributeEncoder の Destination Encoding パラメーター選択肢のカッコ内に示されている (“shift_jis”, “utf-8” など)。

encoding: エンコーディング名を指定する。
str: 処理対象とする文字列を指定する。
useBytes: str のバイト列を encoding で表現される文字列にエンコードする (TRUE) / str を encoding でエンコードする (FALSE) を指定する。省略したときは FALSE とみなされる。

cf. AttributeEncoder トランスフォーマー
@FindRegEx(string str, string regExp, [int startIdx], [bool caseSensitive])
str に指定した文字列のうち、regExp に指定した正規表現と一致する部分の最初の文字の位置 (文字列先頭を 0 とするインデクス) を返す。一致する部分がないときは -1 を返す。

startIdx: 検索を始める文字の位置を指定する。省略したときは 0 とみなされる。
caseSensitive: 英大文字小文字を区別する (TRUE) / しない (FALSE) を指定する。省略したときは TRUE とみなされる。

cf. StringSearcher トランスフォーマー
@FindString(string str, string findStr, [int startIdx], [bool caseSensitive])
str に指定した文字列のうち、findString に指定した文字列と一致する部分の最初の文字の位置 (文字列先頭を 0 とするインデクス) を返す。一致する部分がないときは -1 を返す。

startIdx: 検索を始める文字の位置を指定する。省略したときは 0 とみなされる。
caseSensitive: 英大文字小文字を区別する (TRUE) / しない (FALSE) を指定する。省略したときは TRUE とみなされる。

cf. StringSearcher トランスフォーマー
@Format(string formatStr, float num)
formatStr に指定した書式指定文字列によって num に指定した数値(s で指定する書式では数値以外の文字列も可)を書式化した文字列を返す。
書式指定文字列の詳細については StringFormatter トランスフォーマーのヘルプの Format String パラメーターの説明を参照。ただし、@Format 関数で使用する書式指定文字列の先頭には % を付加する。例: %05d

cf. StringFormatter トランスフォーマー
@FullTitleCase(string str)
str に指定した文字列における全ての単語について、単語ごとに最初の文字を大文字、他を小文字に変換した文字列を返す。
この関数は文字列先頭またはスペースの直後にあるカッコ類を無視し、ハイフンはスペースとして取り扱う。

cf. StringCaseChanger トランスフォーマー
@GetWord(string str, int wordNum)
str に指定した文字列における wordNum 番目 (先頭を 0 とする) の単語を返す。
wordNum に負の整数を指定したときは、str の末尾からの wordNum 番目 (末尾を -1 とする) の単語を返す。
wordNum 番目の単語がない場合は空文字列を返す。
@Left(string str, int n)
str に指定した文字列の先頭から n 文字までの部分文字列を返す。
str の文字数が n 未満のときは str を返す。

cf. SubstringExtractor トランスフォーマー
@LowerCase(string str)
str に指定した文字列の全ての文字を小文字に変換した文字列を返す。

cf. StringCaseChanger トランスフォーマー
@PadLeft(string str, int n, [string char])
str に指定した文字列の文字数が n 未満であるときは、n に不足する数の char を先頭に追加した文字列を返す。
str に指定した文字列の文字数が n 以上であるときは、str を返す。

char: str の文字数が n 未満のときに先頭に追加する文字。省略したときはスペースが使われる。

cf. StringPadder トランスフォーマー
@PadRight(string str, int n, [string char])
str に指定した文字列の文字数が n 未満であるときは、n に不足する数の char を末尾に追加した文字列を返す。
str に指定した文字列の文字数が n 以上であるときは、str を返す。

char: str の文字数が n 未満のときに末尾に追加する文字。省略したときはスペースが使われる。

cf. StringPadder トランスフォーマー
@ReplaceRegEx(string str, string regExp, string newStr, [bool caseSensitive])
str に指定した文字列のうち、regExp に指定した正規表現と一致する全ての部分を newStr に指定した文字列に置き換えた文字列を返す。

caseSensitive: 英大文字小文字を区別する (TRUE) / しない (FALSE) を指定する。省略したときは TRUE とみなされる。

cf. StringReplacer トランスフォーマー
@ReplaceString(string str, string oldStr, string newStr, [bool caseSensitive])
str に指定した文字列のうち、oldExp に指定した文字列と一致する全ての部分を newStr に指定した文字列に置き換えた文字列を返す。

caseSensitive: 英大文字小文字を区別する (TRUE) / しない (FALSE) を指定する。省略したときは TRUE とみなされる。

cf. StringReplacer トランスフォーマー
@Right(string str, int n)
str に指定した文字列の末尾から n 文字までの部分文字列を返す。
str の文字数が n 未満のときは str を返す。

cf. SubstringExtractor トランスフォーマー
@StringLength(string str)
str に指定した文字列の文字数を返す。

注: FME 2019時点で、この関数には日本語全角文字を含む文字列の長さ(文字数)が正確に求められないという問題があります。文字列の長さを求める必要があるときはこの関数ではなく、StringLengthCalculatorトランスフォーマーを使用してください。この問題については Safe Software に修正を要請済みです。

cf. StringLengthCalculator トランスフォーマー
@Substring(string str, int startIdx, [int n])
str に指定した文字列のうち、startIdx に指定した位置から始まる n 文字の部分文字列を返す。
startIdx が str の文字数以上である場合は空文字列を返す。

n: 抽出する部分文字列の数。省略したときは startIdx から始まる末尾までの部分文字列を返す。

cf. SubstringExtractor トランスフォーマー
@TitleCase(string str)
str に指定した文字列の先頭の文字を大文字、他を小文字に変換した文字列を返す。

cf. StringCaseChanger トランスフォーマー
@Trim(string str, [string chars])
str に指定した文字列の先頭と末尾から chars に指定した文字が連続する部分を削除した文字列を返す。

chars: 削除する文字 (複数可)。省略したときは空白類文字 (スペース、タブ、改行等) を削除する。

cf. AttributeTrimmer トランスフォーマー
@TrimLeft(string str, [string chars])
str に指定した文字列の先頭から chars に指定した文字が連続する部分を削除した文字列を返す。

chars: 削除する文字 (複数可)。省略したときは空白類文字 (スペース、タブ、改行等) を削除する。

cf. AttributeTrimmer トランスフォーマー
@TrimRight(string str, [string chars])
str に指定した文字列の末尾から chars に指定した文字が連続する部分を削除した文字列を返す。

chars: 削除する文字 (複数可)。省略したときは空白類文字 (スペース、タブ、改行等) を削除する。

cf. AttributeTrimmer トランスフォーマー
@UpperCase(string str)
str に指定した文字列の全ての文字を大文字に変換した文字列を返す。

cf. StringCaseChanger トランスフォーマー
@WordCount(string str)
str に指定した文字列における単語の数を返す。

関数名における大文字と小文字は厳密に区別されます。例えば @Trim関数について、@trim や @TRIM は無効です。

構文において string は文字列、int は整数、float は数値、bool はブール値(文字列の”TRUE”または”FALSE”)の引数であること、[ ] は省略できることを意味します。

各関数の引数には値(文字列)を直接記述する他、@Value(属性名) で取得する入力フィーチャーの属性値、適切な型の値を返す他の関数の呼び出し、$(パラメーター名) で参照するユーザーパラメーターの値も設定できます。

引数として文字列を直接記述する場合、通常、それを二重引用符 ” で囲むことは必須ではありません。関数名の次の ( ) 内に書かれた引数リストのカンマで区切られた各パーツ(カンマ前後の空白を含む)が、それぞれひとつの文字列(引数)として解釈されます。ただし、カンマが含まれる文字列、および空文字列(文字数0の文字列)を引数として指定する場合は、その引数を二重引用符で囲む必要があります。

カンマが含まれない文字列を二重引用符 ” で囲んでも構いません。ただし、二重引用符で囲む文字列内にデータとしての二重引用符が含まれる場合は、その前にバックスラッシュ \ (日本語版Windowsでは半角の¥記号)をつけてください(\”)。

また、末尾がバックスラッシュ \ である文字列を二重引用符で囲むと、\ に続く ” とあわせてデータとしての二重引用符(\”)として解釈されてエラーの原因になりますので、注意してください。

文字列内の文字、単語の位置は、その文字列の先頭を 0 とするインデクスで表します。引数として検索開始位置等を指定する文字の位置は、その文字列の末尾の位置を -1 とする負のインデクスで表すこともできます。

単語とは、文字列の先頭、終端、空白類文字 (スペース、タブ、改行など)に挟まれた部分文字列を指します。全角の空白は空白類文字には含まれません。

マルチバイト文字(いわゆる全角文字)も原則として文字の単位で文字数がカウントされます。特定のエンコーディング(UTF-8、Shift JISなど)における文字コードのバイト数ではないことに注意してください。