MikoScript3 言語仕様

 文字列操作

 本章では、主に文字列操作に関連する以下のシステム組み込みリレー型関数について
説明しています。

 文字列→数値への変換
   'int     文字列 → 整数値
   'float    文字列 → 実数値
 数値→文字列への変換
   'd      数値 → 10進表記文字列
   'x      数値 → 16進表記文字列
   'o      数値 → 8進表記文字列
   'b      数値 → 2進表記文字列
   'f      数値 → f 型実数表記文字列
   'e      数値 → e 型実数表記文字列
   'g      数値 → g 型実数表記文字列
   'c      文字コード → 文字列
 書式変換
   'fmt     書式指定文字列への変換
 部分抽出/整形/反復/変位/補修
   'part     部分抽出 or 部分置換
   's      桁幅内配置調整
   'trim     左右端空白除去
   'rep     反復
   'shift    シフト
   'rotate    回転
   'reverse   逆順
   'mend     補修
 コード数/字数/コード値/字種の取得
   'cn      文字列のコード数
   'kn      文字列の字数
   'hn      文字列の桁数
   'chcode    文字列内の文字のコード値
   'chkind    文字コードの種別
 字種変換
   'upper    小文字 → 大文字
   'lower    大文字 → 小文字
   'capit    頭文字化
   'toZenk    半角 → 全角
   'toHank    全角 → 半角
   'toHira    カタカナ → ひらかな
   'toKata    ひらかな → カタカナ
 比較
   'icmp     大小文字区別なし文字列比較
   'wcmp     ワイルドカード文字列比較
   'jcmp     日本語辞書順の文字列比較
 正規表現による操作
   'match     一致部の検出
   'split     一致部で分割
   'field     一致部で区切
   'subst     一致部の置換
 囲い/区切り/その他
   'quote     引用符の付加
   'dequote    引用符の除去
   'ds      数字3桁毎の区切り
   'CsvEnc    CSV 文字列への統合
   'CsvDec    CSV 文字列から分解
   'TsvEnc    TSV 文字列への統合
   'TsvDec    TSV 文字列から分解
   'UrlEnc    URL エンコード文字列
   'UrlDec    URL デコード文字列
 文字コード符号化方式
   'CharEnc    文字コード符号化方式の指定

演算子による文字列の操作は、「演算子」の章内の次の各節で述べています。
  ・算術二項演算子
  ・比較演算子
  ・論理演算子
純粋配列での文字列の操作は、「純粋配列」の章内の次の節で述べています。
  ・純粋配列の要素データ上の文字コード列の操作


●文字列→数値への変換
 T'int( n ) → 整数値
機能: 対象の文字列 T を整数値に変換します( n は進数を指定 )
説明: n が省略/不正時、対象の文字列は、10進数として扱われます。
    n = 2〜36 の時、対象の文字列は n 進数として扱われます。この場合、
      対象の文字列の先頭に、+ または - の符号があっても構いません。
      対象の文字列内の a〜z または、A〜Z は、10 以上の数字に対応します。
    n = 0 の時、対象の文字列が、
      "0x" または "0X" で始まっていれば 16進数、
      "0" で始まっていれば 8進数、
      それ以外は、10進数として扱われます。
    n = -2 〜 -36 の時、対象の文字列は -n 進数として扱われます。この場合、
      基本的に、n = 2〜36 の時と同じですが、返値は、符号なしの 32-bit 値に
      なります。
    n がそれ以外の時、結果は不定です。
    対象の文字列の最初にある空白文字は、読み飛ばされます。
    対象の文字列内に、想定外の文字があれば、そこで変換は終って、その時点での
      値を返します。なお、変換開始時の初期値は、0 です。
    変換時にオーバーフローがあった場合の返値は、未定義です。
    対象の入出力形式に、BYTE, UBYTE, SHORT, USHORT が設定されている場合には、
      これに応じた値を返します。なお、これ以外の入出力形式は無視されます。
補説: 'int の対象が実数値の場合、その小数点以下を切り捨てた整数値を返します。
    'int の対象が整数値の場合、その値自身を返します。
    いずれの場合でも、その対象に上述の入出力形式が設定されていれば、それに
    応じた値になります。
    'int の対象が、文字列でも数値でもなければ、null を返します。
用例:
        print "123"'int;         // → 123
        print "-456"'int;        // → -456
        print "1A"'int(16);      // → 26
        print "1100"'int(2);     // → 12
        A = "78";
        print ( A + "90" )'int;  // → 7890
        print 1000.0'int;        // → 1000
        print "0x3F"'int(0);     // → 63
        print "012"'int(0);      // → 10
        print "0x81"'BYTE'int(0);       // → -127
        print "0xA001C"'USHORT'int(0);  // → 28
T'float → 実数値 機能: 対象の文字列 T を実数値に変換します 説明: 対象の文字列は、実数値、または、10進の整数値を表記している文字列として       解釈されます。     対象の文字列の最初にある空白文字は、読み飛ばされます。     対象の文字列内に、想定外の文字があれば、そこで変換は終って、その時点での       値を返します。なお、最初から想定外の文字なら、0.0 を返します。     変換時にオーバーフローがあった場合の返値は、未定義です。 補説: 'float の対象が整数値の場合、その実数値を返します。     'float の対象が実数値の場合、その値自身を返します。     'float の対象に入出力形式が設定されていても無視されます。     'float の対象が、文字列でも数値でもなければ、null を返します。 用例:
        print "12.3"'float;         // → 12.3
        print "-4.56E+10"'float;    // → -4.56e+010
        A = "-78";
        print ( A + ".90" )'float;  // → -78.9
●数値→文字列への変換 T'd( n, w ) → 10進表記文字列 機能: 対象 T の整数値を 10進表記文字列に変換します 説明: 引数 n は、出力される 10進数字列の桁数を指定します。      なお、以降で、N は、T の 10進表記に実質的に必要な最小限の桁数です。      この N には、+ や - の符号は含みません。      n が省略/不正の時、または、0 <= n < N の時、n = N になります。      n > N の時、余分の上位桁は 0 で埋ります。      n > 32 の時、n = 32 として扱います。      n <= 0 の時、T が正なら、10進数字列の先頭に +(プラス)符号が付きます。       さらに、n = -n として、上記のように扱います。      T が負なら、10進数字列の先頭に -(マイナス)符号が付きます。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      全桁幅は、最大でも 32 桁までです。 補説: T が実数値の場合、その整数部が対象になります。     T が数値以外の場合、null を返します。 用例:
        #set   q   quote
        print  +123'd        '#q;    // → "123"
        print  +123'd(0)     '#q;    // → "+123"
        print  +123'd(5)     '#q;    // → "00123"
        print  +123'd(-5)    '#q;    // → "+00123"
        print  +123'd(,10)   '#q;    // → "       123"
        print  +123'd(0,10)  '#q;    // → "      +123"
        print  +123'd(-5,-10)'#q;    // → "+00123    "
        print  -123'd        '#q;    // → "-123"
        print  -123'd(0)     '#q;    // → "-123"
        print  -123'd(5)     '#q;    // → "-00123"
        print  -123'd(-5)    '#q;    // → "-00123"
        print  -123'd(,10)   '#q;    // → "      -123"
        print  -123'd(0,10)  '#q;    // → "      -123"
        print  -123'd(-5,-10)'#q;    // → "-00123    "
        print  "ABC"'d;              // → <null>
T'x( n, w ) → 16進表記文字列 機能: 対象 T の整数値を 16進表記文字列に変換します 説明: 引数 n は、出力される 16進数字列の桁数を指定します。      なお、以降で、N は、T の 16進表記に実質的に必要な最小限の桁数です。      n が省略/不正の時、または、n < N の時、n = N になります。      n > N の時、余分の上位桁は 0 で埋ります。      n > 32 の時、n = 32 として扱います。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      全桁幅は、最大でも 32 桁までです。 補説: 16進表記では、10進の 10〜15 の値は、A〜F になります。     これを a〜f にしたい場合は、'x に続けて 'lower とします。     16進表記では、T の正負とは無関係のため、+/- の符号は付きません。     T が実数値の場合、その整数部が対象になります。     T が数値以外の場合、null を返します。 用例:
        #set   q    quote
        print  0xABC'x       '#q;   // → "ABC"
        print  0xABC'x(5)    '#q;   // → "00ABC"
        print  0xABC'x(,10)  '#q;   // → "       ABC"
        print  0xABC'x(5,-10)'#q;   // → "00ABC     "
        print  123'x         '#q;   // → "7B"
        print  123'x(5)      '#q;   // → "0007B"
        print -456'x         '#q;   // → "FFFFFE38"
        print -456'x(6)      '#q;   // → "FFFFFE38"
        print -456'x'lower   '#q;   // → "fffffe38"
        print  78.9'x        '#q;   // → "4E"
        print  "ABC"'x;             // → <null>
T'o( n, w ) → 8進表記文字列 機能: 対象 T の整数値を 8進表記文字列に変換します 説明: 引数 n は、出力される 8進数字列の桁数を指定します。      なお、以降で、N は、T の 8進表記に実質的に必要な最小限の桁数です。      n が省略/不正の時、または、n < N の時、n = N になります。      n > N の時、余分の上位桁は 0 で埋ります。      n > 32 の時、n = 32 として扱います。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      全桁幅は、最大でも 32 桁までです。 補説: 8進表記では、T の正負とは無関係のため、+/- の符号は付きません。     T が実数値の場合、その整数部が対象になります。     T が数値以外の場合、null を返します。 用例:
        #set   q    quote
        print  0b1`010`011'o       '#q;   // → "123"
        print  0b1`010`011'o(7)    '#q;   // → "0000123"
        print  0b1`010`011'o(,10)  '#q;   // → "       123"
        print  0b1`010`011'o(5,-10)'#q;   // → "00123     "
        print  123'o               '#q;   // → "173"
        print  123'o(5)            '#q;   // → "00173"
        print -456'o               '#q;   // → "37777777070"
        print -456'o(12)           '#q;   // → "037777777070"
        print  78.9'o              '#q;   // → "116"
        print  "ABC"'o;                   // → <null>
T'b( n, w ) → 2進表記文字列 機能: 対象 T の整数値を 2進表記文字列に変換します 説明: 引数 n は、出力される 2進数字列の桁数を指定します。      なお、以降で、N は、T の 2進表記に実質的に必要な最小限の桁数です。      n が省略/不正の時、または、n < N の時、n = N になります。      n > N の時、余分の上位桁は 0 で埋ります。      n > 32 の時、n = 32 として扱います。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      全桁幅は、最大でも 32 桁までです。 補説: 2進表記では、T の正負とは無関係のため、+/- の符号は付きません。     T が実数値の場合、その整数部が対象になります。     T が数値以外の場合、null を返します。 用例:
        #set   q    quote
        print  0b1010011'b       '#q;   // → "1010011"
        print  0b1010011'b(8)    '#q;   // → "01010011"
        print  0b1010011'b(,10)  '#q;   // → "   1010011"
        print  0b1010011'b(5,-10)'#q;   // → "1010011   "
        print  123'b             '#q;   // → "1111011"
        print  123'b(16)         '#q;   // → "0000000001111011"
        print -456'b             '#q;   // → "11111111111111111111111000111000"
        print -456'b(20)         '#q;   // → "11111111111111111111111000111000"
        print  78.9'b            '#q;   // → "1001110"
        print  "ABC"'b;                 // → <null>
T'f( n, w ) → f 型実数表記文字列 機能: 対象 T の数値を f 型実数表記文字列に変換します 説明: f 型実数表記は、###.### の形式で実数値を表わします。      ここで、### は、何桁かの 10進数字列です。      +/- の符号がある場合は、この表記の先頭に付きます。     引数 n は、小数点以下何桁まで出力するかを指定します。      n が省略/不正の時、n = 6 として扱います。      n は 32 を超えても 32 として扱います。      n = 0 の時、小数点とそれ以下の桁は表記されません。      n の指定で切り取られる桁は、四捨五入されます。      n < 0 の時、T が正なら、先頭に +(プラス)符号が付きます。       さらに、n = -n として、上記のように扱います。      T が負なら、先頭に -(マイナス)符号が付きます。      整数部は、n の指定とは無関係に、その全桁が出力されます。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      w > 32 の時、w = 32 として扱います。 注意: f 型実数表記では、例えば、1e+80'f のような場合、80 字以上のかなり長い       文字列になります。     T が数値以外の場合、null を返します。 用例:
        #set   q    quote
        print  ::Math.sqrt(2)'f(8)  '#q;    // → "1.41421356"
        print  ::Math.arctan(-1,0)'f'#q;    // → "3.141593"
        print  12.345'f(0)          '#q;    // → "12"
        print  12.345'f(1)          '#q;    // → "12.3"
        print  12.345'f(2)          '#q;    // → "12.35"
        print  -1.23456789e+20'f    '#q;    // → "-123456789000000000000.000000"
        print  +123.45678'f         '#q;    // → "123.456780"
        print  +123.45678'f(-1)     '#q;    // → "+123.5"
        print  +123.45678'f(-4,15)  '#q;    // → "      +123.4568"
        print  +123.45678'f(-4,-15) '#q;    // → "+123.4568      "
        print  -123.45678'f         '#q;    // → "-123.456780"
        print  -123.45678'f(-1)     '#q;    // → "-123.5"
        print  -123.45678'f(-4,15)  '#q;    // → "      -123.4568"
        print  -123.45678'f(-4,-15) '#q;    // → "-123.4568      "
        print  "ABC"'f;                     // → <null>
T'e( n, w ) → e 型実数表記文字列 機能: 対象 T の数値を e 型実数表記文字列に変換します 説明: e 型実数表記は、#.###e+### の形式で実数値を表わします。      ここでは、仮数部の #.### と、指数部の e+### があります。      仮数部に、+/- の符号がある時は、この先頭に付きます。      仮数部の小数点以上の桁は、必ず1桁になります。      仮数部の小数点以下の桁は、引数 n で指定します。      指数部は、e の次の + か - の符号が付いた 10進 3桁の数字列です。     引数 n は、仮数部の小数点以下何桁まで出力するかを指定します。      n が省略/不正の時、n = 6 として扱います。      n は 32 を超えても 32 として扱います。      n = 0 の時、小数点とそれ以下の桁は表記されません。      n の指定で切り取られる桁は、四捨五入されます。      n < 0 の時、T が正なら、先頭に +(プラス)符号が付きます。       さらに、n = -n として、上記のように扱います。      T が負なら、先頭に -(マイナス)符号が付きます。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      w > 32 の時、w = 32 として扱います。 注意: T が数値以外の場合、null を返します。 用例:
        #set   q    quote
        print  +123.45678'e         '#q;    // → "1.234568e+002"
        print  +123.45678'e(3)      '#q;    // → "1.235e+002"
        print  +123.45678'e(-1)     '#q;    // → "+1.2e+002"
        print  +123.45678'e(-4,15)  '#q;    // → "   +1.2346e+002"
        print  +123.45678'e(-4,-15) '#q;    // → "+1.2346e+002   "
        print  -123.45678'e         '#q;    // → "-1.234568e+002"
        print  -123.45678'e(3)      '#q;    // → "-1.235e+002"
        print  -123.45678'e(-1)     '#q;    // → "-1.2e+002"
        print  -123.45678'e(-4,15)  '#q;    // → "   -1.2346e+002"
        print  -123.45678'e(-4,-15) '#q;    // → "-1.2346e+002   "
        print  ::Math.arctan(-1,0)'e'#q;    // → 3.141593e+000
        print  "ABC"'e;                     // → <null>
T'g( n, w ) → g 型実数表記文字列 機能: 対象 T の数値を g 型実数表記文字列に変換します 説明: 引数 n は、有効桁数を指定します。     g 型実数表記は、概ね、f 型実数表記と e 型実数表記の短い方になります。     厳密には、e 型実数表記になるのは、その指数が -5 以下か、n 以上の場合です。     それ以外の場合には、f 型実数表記になります。     但し、g 型実数表記では、小数点以下の末尾桁の 0 は除かれます。また、     小数点以下の全桁が 0 の場合、小数点は付加されません。     n で指定される有効桁数には、負号 - と小数点 . は含まれません。     有効桁から外れる桁は四捨五入されます。     T が正数の時、+ 符号を付けた表記にするには、n の値を負にします。      その際、その絶対値が、有効桁数の指定として扱われます。     引数 w は、このように変換された文字列(以降 S と呼びます)の全桁幅を、      次のように調整します。なお、以降で、k は、文字列 S の桁数です。       w > k の時、全桁幅が w で、S を右詰めした文字列を返します。      -w > k の時、全桁幅が -w で、S を左詰めした文字列を返します。      -k <= w <= k または、w が省略/不正の時、S をそのまま返します。      なお、S を右詰め/左詰めする際、残りの桁は半角空白で埋められます。      w > 32 の時、w = 32 として扱います。 注意: T が数値以外の場合、null を返します。 用例:
        #set   q    quote
        print  +123.45678'g        '#q;    // → "123.457"
        print  +123.45678'g(-4,15) '#q;    // → "         +123.5"
        print  +123.45678'g(-4,-15)'#q;    // → "+123.5         "
        print  -123.45678'g        '#q;    // → "-123.457"
        print  -123.45678'g(-4,15) '#q;    // → "         -123.5"
        print  -123.45678'g(-4,-15)'#q;    // → "-123.5         "
        print  0.00012345'g        '#q;    // → "0.00012345"
        print  0.000012345'g       '#q;    // → "1.2345e-005"
        print  1.2345'g(2)         '#q;    // → "1.2"
        print  12.345'g(2)         '#q;    // → "12"
        print  123.45'g(2)         '#q;    // → "1.2e+002"
        print  "ABC"'g;                    // → <null>
T'c → 文字列 機能: 対象の文字コード T を文字列に変換します 説明: 対象の整数値を文字コードとする文字列を返します。     対象の整数値内には、1〜4 バイトの文字コードが格納できます。 用例:
        print `A`'c;        // → A
        print `ABCD`'c;     // → ABCD
        print `あい`'c;     // → あい

        S = "";
        for( c = `A` ; c <= `Z` ; c++ )
            S += c'c;
        print S;  // → ABCDEFGHIJKLMNOPQRSTUVWXYZ
●書式変換 T'fmt( 引数並び ) → 文字列 機能: 対象の文字列 T の書式に基づいて引数並びを変換した文字列を返します 説明: 対象の文字列 T 内には、通常文字列部と書式規定部が混在します。     通常文字列部は、そのまま出力します。一方、     書式規定部は、対応する引数を、その書式に応じた文字列に変換して出力します。     ここで、出力というのは、本関数が返す文字列に含めるということです。     書式規定部は、必ず、% で始まり、特定のアルファベット1字で終ります。     例えば、"A=%d,B=%08X;" では、通常文字列部は、"A=", ",B=", ";" の3箇所で、     書式規定部は、"%d", "%08X" の2箇所になります。     書式規定部の最後の1字は重要で、対応する引数のデータ型(とその扱い方)と     その変換文字列の書式を決定します。以下に、その一覧を示します。なお、この     表内の各変換文字列の書式については、前節で述べています。また、最後の1字     にはここに挙げた以外にも、C n p S がありますが、本言語では、使用禁止です。
      字  引数データ型 変換文字列の書式         
d 整数(符号あり)10進文字列
i (同上)(同上)
u 整数(符号なし)10進文字列
o 整数(符号なし)8進文字列
X 整数(符号なし)16進文字列( 10以上の数字は A〜F )
x 整数(符号なし)16進文字列( 10以上の数字は a〜f )
c 整数(文字コード)文字(半角のみ有効)
e 実数e 型実数表記文字列(指数は e )
E 実数e 型実数表記文字列(指数は E )
f 実数f 型実数表記文字列
g 実数g 型実数表記文字列(指数は e )
G 実数g 型実数表記文字列(指数は E )
s 文字列   引数の文字列そのもの
    書式規定部の最初の % と最後の1字の間には、下記の指定をこの順で入れる     ことができます。また、これらの各指定は、個々に省略することもできます。     省略時には、そのデフォールトの仕様が適用されます。      ・フラグ        次の1字で各仕様を規定します。         -   変換文字列をフィールド内に左詰で配置します。         +   数値変換文字列の先頭に必ず + - の符号を付けます。         0   数値変換文字列の左側の余桁を 0 で埋めます。         空白 数値変換文字列の先頭が符号でなければ空白を前置します。         #   次の各書式変換方式の場合の仕様を規定します。             o x X: 数値が 0 でなければ、その変換文字列の前に、                それぞれ、0, 0x, 0X を付けます。             e E f: その変換文字列内に必ず小数点を含めます。             g G: その変換文字列内に必ず小数点を含め、              末尾の 0 を除去しません。        この各デフォールト仕様は、それぞれ、右詰、負値のみ符号付加、        空白で埋める、空白前置なし、各通常の変換文字列、になります。      ・フィールド幅        変換文字列を納めるフィールドの幅の字数(半角単位)を指定します。        この幅が、変換文字列よりも長い場合、          変換文字列は、右詰されます。          但し、前記フラグで - 指定が有効な時は、左詰されます。          余った空間は、空白で埋められます。          但し、前記フラグで 0 指定が有効な時は、0 で埋められます。        この幅が、変換文字列よりも短いか等しい場合、          変換文字列は、そのまま出力されます。          この幅での切り取りは行なわれません。        この幅の指定は、その字数を表わす10進整数の数字列か、または、        * 1字にします。* の場合、それに対応する引数の値が、その字数として        使われます。なお、この引数は整数型でなければいけません。      ・精度        次の各書式変換方式の場合に応じて、各仕様を規定します。         d i u o x X:          整数値→文字列変換での最少限の桁数を規定します。つまり、          精度の桁数が、この変換での実質桁数よりも多い場合に限り、          この桁数差分の上位桁に 0 が補填されます。          デフォールトは、1 です。         e E f:          小数点以下の有効桁数を規定します。          この有効桁内には、四捨五入して納められます。          精度=0 の場合、整数部だけになり、小数点も付きません。          デフォールトは、6 です。         g G:          有効桁数を規定します。          この有効桁内には、四捨五入して納められます。          デフォールトは、6 です。         s:          対応する引数の文字列の最大字数(半角単位)を規定します。          この字数がその文字列より長い場合、その末尾部が切り取られます。          この字数がその文字列より短いか同じ場合、そのままになります。          デフォールトは、その文字列の全字数(半角単位)です。         c:          この場合の精度は無効です。        この精度を指定する場合、ピリオド(.)に続けて、         その桁数を表わす10進整数の数字列か、または、         * 1字にします。* の場合、それに対応する引数の値が、その桁数に          なります。なお、この引数は整数型でなければいけません。      ・サイズ        h l L のどれかの1字で引数のサイズを規定しますが、        本言語では、現状、特別な効果はありません。     なお、% 以降の文字列が、上述の書式規定部の表記形態に合致しない場合には、     その最初の % から合致しないことが発覚する直前までの部分は無視されます。     合致しないことを発覚させた文字自身はそのまま出力されます。それ以降は、     通常通りの扱いになります。従って、%% は、% 自身の出力になります。     対象文字列 T 内の各書式規定部は、その出現順に、引数並び内の各引数に対応     します。ただし、書式規定部内でフィールド幅や精度の指定が * の場合には、     それに対応する引数が、その書式規定部に対応する引数の直前に介在します。     書式規定部と引数の対応に不整合がある場合、例えば、その個数に過不足がある     場合や、データ型が合わない場合、本関数は、null 返すか、または、無意味な     文字列を返すことになります。 注意: 現状、引数は、最大 32 個まで可能です。また、本関数が返す文字列のサイズは、     最大 8192 字までになります。 用例:
        v = 123;
        print "|%d|%d|"'fmt( v, -v );           // → |123|-123|
        print "|%8d|%8d|"'fmt( v, -v );         // → |     123|    -123|
        print "|%-8d|%-8d|"'fmt( v, -v );       // → |123     |-123    |
        print "|%8.5d|%8.5d|"'fmt( v, -v );     // → |   00123|  -00123|
        print "|%-8.2d|%-8.2d|"'fmt( v, -v );   // → |123     |-123    |
        print "|%*.4d|%-*.*d|"
                       'fmt( 8, v, 8, 4, -v );  // → |    0123|-0123   |

        v = 456;
        print "|%i|%i|"'fmt( v, -v );           // → |456|-456|
        print "|%u|%u|"'fmt( v, -v );           // → |456|4294966840|

        v = 0x3AB;
        print "|%X|%x|"'fmt( v, v );            // → |3AB|3ab|
        print "|%8X|%08x|"'fmt( v, v );         // → |     3AB|000003ab|
        print "|%#8X|%#08x|"'fmt( v, v );       // → |   0X3AB|0x0003ab|
        print "|%-#8.4X|%-#08.4x|"'fmt( v, v ); // → |0X03AB  |0x03ab  |

        v = 12.345;
        print "|%f|%e|"'fmt( v, v );            // → |12.345000|1.234500e+001|
        print "|%8.2f|%12.2E|"'fmt( -v, -v );   // → |  -12.35|  -1.23E+001|
        print "|%-8.1f|%-12.1E|"'fmt( v, v );   // → |12.3    |1.2E+001    |

        v = 12.3456789;
        print "|%g|%G|"'fmt( v, -v*1e10 );      // → |12.3457|-1.23457E+011|
        print "|%.4g|%.4g|"'fmt( v, -v );       // → |12.35|-12.35|
        print "|%-10.3g|%-10.3g|"'fmt( v, -v ); // → |12.3      |-12.3     |

        print "|%s|"'fmt( "ABCxyz" );           // → |ABCxyz|
        print "|%10s|"'fmt( "ABCxyz" );         // → |    ABCxyz|
        print "|%-10s|"'fmt( "ABCxyz" );        // → |ABCxyz    |
        print "|%10.5s|"'fmt( "ABCxyz" );       // → |     ABCxy|
        print "|%-10.4s|"'fmt( "ABCxyz" );      // → |ABCx      |

        print "|%c|%c|%c|"'fmt( `A`,`ア`,`あ` ); // → |A|ア|あ|
        print "|%%%s%-45.6^|"'fmt( "ABC" );     // → |%ABC^|
●部分抽出/整形/反復/変位/補修 T'part( i, n, r ) → 部分抽出文字列 or 部分置換文字列 機能: 対象の文字列 T 内の ( i, n ) 部分を抽出して返すか、または、     対象の文字列 T 内の ( i, n ) 部分を文字列 r に置換した文字列を返します。 説明: i は、対象文字列内の部分文字列の先頭までの字数を指定します。       i >= 0: 対象文字列の先頭から順方向への字数       i < 0: 対象文字列の末尾から逆方向への字数       i が省略/不正時、i = 0 として扱われます     n は、部分文字列の字数または範囲を指定します。       n >= 0: 部分文字列の字数       n < 0: 対象文字列の末尾まで(この場合、負数の値は任意です)       n が省略/不正時、n = 1 として扱われます     r が省略、または、文字列でない時、       対象文字列内の (i,n) の部分文字列を返します     r が文字列の時、       対象文字列内の (i,n) の部分文字列を r に置換した文字列を返します 注意: i と n の単位は、字数になります。     (i,n) の指定が、対象文字列 T の範囲外に及ぶ場合、       その部分は対象外になります。 用例:
        print "ABCDEFGH"'part(2,3);             // → CDE
        print "ABCDEFGH"'part(2,-1);            // → CDEFGH
        print "ABCDEFGH"'part(2);               // → C
        print "ABCDEFGH"'part(-4,3);            // → EFG
        print "ABCDEFGH"'part(-4,-1);           // → EFGH
        print "ABCDEFGH"'part(-4);              // → E
        print "ABCDEFGH"'part(,3);              // → ABC
        print "あいうえお"'part(-3,2);          // → うえ
        print "あイウエお"'part(2,3);              // → ウエお
        print "ABCDEFGH"'part(3,2,"xyz");       // → ABCxyzFGH
        print "あいうえお"'part(2,-1,"ABC");    // → あいABC
T's( w, k ) → 桁幅内配置調整文字列 機能: 対象の文字列 T の桁幅(フィールド)内の配置を調整した文字列を返します 説明: w の絶対値は全幅の桁数で、w が負なら左詰、正なら右詰になります。     w が省略/不正時、対象の文字列の幅が全幅になります。     w の絶対値が 1024 を超えても、1024 として扱われます。     k は、w で決まる桁幅内に配置される対象文字列をシフトする桁数になります。     k が負で左シフト、正で右シフト、0でセンターになります。     k が省略/不正時、シフトは行なわれません。     桁幅内の余白は半角空白で埋められます。     なお、桁幅は、半角文字では 1、全角文字では、2 になります。 用例:
        print ":" + "ABC"'s(7) + ":";         // → :    ABC:
        print ":" + "ABC"'s(7,+1) + ":";      // → :     AB:
        print ":" + "ABC"'s(7,-1) + ":";      // → :   ABC :
        print ":" + "ABC"'s(-7) + ":";        // → :ABC    :
        print ":" + "ABC"'s(-7,+1) + ":";     // → : ABC   :
        print ":" + "ABC"'s(-7,-1) + ":";     // → :BC     :
        print ":" + "ABC"'s(7,0) + ":";       // → :  ABC  :
        print ":" + "ABCDE"'s(3) + ":";       // → :CDE:
        print ":" + "ABCDE"'s(-3) + ":";      // → :ABC:
        print ":" + "イロハ"'s(9) + ":";      // → :   イロハ:
        print ":" + "イロハ"'s(9,+1) + ":";   // → :    イロ :
        print ":" + "イロハ"'s(9,0) + ":";    // → :  イロハ :
T'trim( e, s ) → 左右端空白除去文字列 機能: 対象の文字列 T を 左右端の空白を除去した文字列を返します 説明: e は、左右のどちらの端の空白を除去するかを指定します。       e = 0: 両端, e < 0: 左端のみ, e > 0: 右端のみ       e が省略/不正で、両端     s は、除外対象の空白コードの文字列を指定します。       s が省略/不正で、次の空白コードが除外対象になります。         ASCII の SP, HT, VT, FF, CR, LF と、全角空白       s には、空白だけでなく、任意の文字を指定できます。 用例:
        print ":" + "  ABC XYZ  "'trim + ":";         // → :ABC XYZ:
        print ":" + "  ABC XYZ  "'trim(-1) + ":";     // → :ABC XYZ  :
        print ":" + "  ABC XYZ\n"'trim(+1) + ":";     // → :  ABC XYZ:
        print ":" + "  ABC  \r\n"'trim(+1,"\r\n") + ":";  // → :  ABC  :
        print ":" + "「ABC」"'trim(,"「」") + ":";        // → :ABC:
T'rep( n ) → 反復文字列 機能: 対象の文字列 T を n 回反復した文字列を返します 説明: n の値に応じて、次のようになります。      n > 0: 対象の文字列を n 回反復した文字列を返します      n = 0: 空文字列を返します      n < 0: null を返します      n が省略/不正で、n = 1 として扱います 用例:
        print "ABC"'rep(3);     // → ABCABCABC
T'shift( n ) → シフト文字列 機能: 対象の文字列 T を n 字シフトした文字列を返します。 説明: n は、シフトの方向と字数を規定します。       n > 0: 右シフトの字数       n < 0: 左シフトの字数(絶対値)     n の単位は、字数なので、全角でも半角でも1字にカウントします。     シフトによって端から溢れた文字は消失します。そのため、     文字列の右 n 字シフトは、末尾の n 字の除去になります。     文字列の左 n 字シフトは、先頭の n 字の除去になります。     n が省略/不正で、n = 1 として扱います。     n = 0 の時は、対象の文字列 T をそのまま返します。 補説: 対象 T が整数値の時、⇒参照     エラーの時、null を返します。 用例:
        print "ABCあいう"'shift(-3);       // → あいう
        print "ABCあいう"'shift(+4);       // → AB
T'rotate( n ) → 回転文字列 機能: 対象の文字列 T を n 字回転した文字列を返します。 説明: n は、回転の方向と字数を規定します。       n > 0: 右回転の字数       n < 0: 左回転の字数(絶対値)     n の単位は、字数なので、全角でも半角でも1字にカウントします。     n が省略/不正で、n = 1 として扱います。     n = 0 または、n が対象文字列の字数以上の時、対象文字列をそのまま返します。 補説: 対象 T が整数値の時、⇒参照     対象 T が複合箱の時、⇒参照     エラーの時、null を返します。 用例:
        print "ABCあいう"'rotate(-3);      // → あいうABC
        print "ABCあいう"'rotate(+4);      // → CあいうAB
T'reverse → 逆順文字列 機能: 対象の文字列 T の各文字の並びを逆順にした文字列を返します。 補説: 対象 T が整数値の時、⇒参照     対象 T が複合箱の時、⇒参照     対象 T がメモリーブロックの時、⇒参照     エラーの時、null を返します。 用例:
        print "ABCあいう"'reverse;      // → ういあCBA
T'mend(r,c,s,x) → 補修文字列 機能: 対象の文字列 T 内の不正/0値/制御コードを代替文字で補修して返します。 説明: r は、不正文字コードを代替する半角文字コードを指定します。       r の指定は、文字列ではなく、文字コードにしないといけません。       r が省略/不正の時、`?` が代替文字コードになります。       r = 0 の場合、不正文字コードを除去します。     c は、制御コード( 0x00〜0x1F, 0x7F )の代替文字コード列を指定します。       c の文字列内の各文字を順に、c[i] ( i = 0,1,2,... ) とすると、       c[0] 〜 c[31] は、制御コード 0x00 〜 0x1F の代替文字コードで、       c[32] は、0x7F(DEL) の代替文字コードになります。       c[i] が無い、つまり、c の文字列の長さが i 以下の時、         それに対応する制御コードは、そのまま存続します。         但し、0x00 だけは、半角空白に代替されます。       c[i] が引数 s で指定された文字コードと等しい時、         c[i] が無い時と同じです。       c[i] が引数 x で指定された文字コードと等しい時、         それに対応する制御コードは、除去されます。     s は、上記の意味の文字コードを指定します。       s が省略/不正の時、`+` が指定されたものとして扱います。     x は、上記の意味の文字コードを指定します。       x が省略/不正の時、`-` が指定されたものとして扱います。 例1:
        text'UBYTE(6+32+1+2+4) =  // 制御コード等を含む文字列の純粋配列
        {
            `S`,`T`,`A`,`R`,`T`,`-`,
             0, 1, 2, 3, 4, 5, 6, 7,    // NUL,^A,^B,^C,^D,^E,^F,BEL
             8, 9,10,11,12,13,14,15,    // BS,HT,LF,VT,FF,CR,SO,SI
            16,17,18,19,20,21,22,23,    // ^P,^Q,^R,^S,^T,^U,^V,^W
            24,25,26,27,28,29,30,31,    // ^X,^Y,^Z,ESC,....
            0x7F,                       // DEL
            0x81, 0x32,                 // 不正コード
            `-`,`E`,`N`,`D`,
        };
        print text'gets'mend( 0, "@abcdefghijklmnopqrstuvwxyz[\\]^_!" );
        print text'gets'mend( , "-a-c-e-g-i-k-m-o-q-s-u-w-y-[-]-_-" );
 これを実行すると、次の通りプリントされます。   START-@abcdefghijklmnopqrstuvwxyz[\]^_!??-END   START-acegikmoqsuwy[]_-END 例2:
        // バイナリーファイルの内容を 16進値でダンプする
        file = ::File.Open( "xxx.bin", "in" );
        if( file == null )
            'Error!( "ファイルが開けません!\n" );
        Bytes'UBYTE(16);
        for( offset = 0 ;; offset += 16 )
        {
            bn = file.Read( Bytes );
            if( bn <= 0 )
                break;
            line = offset'x(6) + "  ";
            for( i = 0 ; i < bn ; i++ )
                line += Bytes(i)'x(2) + " ";
            if( bn < 16 )
                line += "   "'rep( 16 - bn );
            line += " " + Bytes'gets( bn )
                    'mend( , "_.........・..・..................." );
            print line;
        }
        file.Close();
●コード数/字数/コード値/字種の取得 T'cn → 文字列のコード数 機能: 対象の文字列 T のコード数を返します 説明: 本言語の内部では、UTF-16(LE) の文字コードを基本にしていますが、     この文字コード系では、通常、1字が1コードで、     サロゲートペアーの場合に、1字が2コードになります。     従って、コード数は、字数と異なる場合があります。     ちなみに、1コードは、2バイトになります。     なお、本関数が返すコード数には、0終端のコードは含みません。 用例:
        print "ABCあいう"'cn;      // → 6
T'kn → 文字列の字数 機能: 対象の文字列 T の字数を返します 説明: 本言語の内部では、UTF-16(LE) の文字コードを基本にしていますが、     この文字コード系では、通常、1字が1コードで、     サロゲートペアーの場合に、1字が2コードになります。     本関数は、これを考慮した字数を返します。 用例:
        print "ABCあいう"'kn;      // → 6
T'hn → 文字列の桁数 機能: 対象の文字列 T の桁数を返します 説明: 桁数は、半角文字では 1、全角文字では、2 になります。 用例:
        print "ABCあいう"'hn;      // → 9
T'chcode(i) → 文字コード値 機能: 対象の文字列の先頭または末尾から第 i 位の文字の文字コード値を返します 説明: i は、文字コードインデックスで、次のようになります。      i = 0, 1, 2, ... で、先頭から、第1、第2、第3、・・・ 番目      i = -1,-2,-3, ... で、末尾から、第1、第2、第3、・・・ 番目     i が省略/不正で、i = 0 として扱います。     なお、第 i 位の文字コードがない場合、null を返します。 注意: サロゲートペアーのコード値は、その前半と後半の値が個別に扱われます。     例えば、対象文字列の先頭がサロゲートペアーの場合、i = 0 でそのペアーの     前半の値、i = 1 で後半の値が、返されます。 用例:
        T = "ABCあいう";
        for( i = 0 ; i < 6 ; i++ )
            print "0x" + T'chcode(i)'x(4), -;
        print ;
        for( i = 1 ; i <= 6 ; i++ )
            print "0x" + T'chcode(-i)'x(4), -;
        print ;
        print T'chcode, T'chcode(8);
   実行結果: 0x0041, 0x0042, 0x0043, 0x3042, 0x3044, 0x3046, 0x3046, 0x3044, 0x3042, 0x0043, 0x0042, 0x0041, 65, <null> T'chkind → 文字種別 機能: 対象の文字コードの文字種別を示す整数値を返します 説明: 文字種別を示す整数値は、現在のところ、次のようになっています。     なお、これらの値は、将来変わる可能性もあります。
数値文字種別
 -1  未定義/無効/不正文字
  0  その他の有効文字
  1  C0 制御コード
  2  ASCII 非英数字
  3  ASCII 数字
  4  ASCII 大文字
  5  ASCII 小文字
  6  半角特殊記号(貨幣記号等)
  7  その他アルファベット大文字
  8  その他アルファベット小文字
  9  全角句読記号等(空白も含む)
 10  ひらかな
 11  カタカナ
 12  漢字
 13  上位サロゲート範囲
 14  下位サロゲート範囲
 15  全角 ASCII 非英数字
 16  全角 ASCII 数字
 17  全角 ASCII 大文字
 18  全角 ASCII 小文字
 19  半角 カタカナ
 20  全角特殊記号(貨幣記号等)
 21  拡張カタカナ
 22  準漢字
 23  ハングル
 24  全角文字(その他)
 25  特殊制御コード
 26  BOM
補説: これらの値を識別名で扱うには、スクリプト内で次のようにします。     各識別名に関しては、当インクルードファイルの内容参照。      #include <Misc.mh> 注意: 対象が、UTF-16 の文字コード以外の場合は、-1 を返します。 ●字種の変換 T'upper → 小文字→大文字変換文字列 機能: 対象の文字列 T 内の各種言語のアルファベット小文字を       大文字に変換した文字列を返します 説明: 対象文字列内の小文字以外の文字はそのままです。     全角の小文字も大文字に変換されます。 用例:
        print "abcXYZ"'upper;           // → ABCXYZ
        print "ABCxyz"'upper;     // → ABCXYZ
        print "αβγΔΣΩ"'upper;     // → ΑΒΓΔΣΩ
T'lower → 大文字→小文字変換文字列 機能: 対象の文字列 T 内の各種言語のアルファベット大文字を       小文字に変換した文字列を返します 説明: 対象文字列内の大文字以外の文字はそのままです。     全角の大文字も小文字に変換されます。 用例:
        print "abcXYZ"'lower;           // → abcxyz
        print "ABCxyz"'lower;     // → abcxyz
        print "αβγΔΣΩ"'lower;     // → αβγδσω
T'capit → 頭文字小→大変換文字列 機能: 対象の文字列 T の頭文字のみを大文字化した文字列を返します 説明: 対象文字列の先頭の小文字を大文字に変換し、       残りの文字列中の大文字を小文字に変換します。     英語だけでなく、各種言語のアルファベット文字が変換されます。     また、全角のアルファベットも変換されます。 用例:
        print "abcXYZ"'capit;           // → Abcxyz
        print "ABCxyz"'capit;     // → Abcxyz
        print "αβγΔΣΩ"'capit;     // → Αβγδσω
T'toZenk → 半角→全角変換文字列 機能: 対象の文字列 T 内の半角文字を全角文字に変換した文字列を返します 説明: 半角カタカナの濁点/半濁点は、      正当なら、その左側の半角カタカナと統合して1つの全角カタカナになります。      不当なら、各単独で全角になります。     全角文字はそのままです。 用例:
        print "ABCxyz123"'toZenk;       // → ABCxyz123
        print "ハンカク→全角"'toZenk;      // → ハンカク→全角
        print "プログラム"'toZenk;         // → プログラム
        print "\\~ア゚イ゙"'toZenk;         // → ¥〜ア゜イ゛
T'toHank → 全角→半角変換文字列 機能: 対象の文字列 T 内の全角文字を半角文字に変換した文字列を返します 説明: 半角文字に変換できない全角文字(ひらかな・漢字等)はそのままです。     濁点/半濁点付きの全角カタカナは、半角カタカナ2字になります。     半角文字はそのままです。 注意: 全角の ¥ は、半角の \ になりますが、全角の \ は半角には変換されません。     これは、Shift-JIS の文字セットには、半角のバックスラッシュがないためです。 用例:
        print "ABCxyz123"'toHank;    // → ABCxyz123
        print "ゼンカク→ハンカク"'toHank;        // → ゼンカク→ハンカク
        print "プログラム"'toHank;            // → プログラム
        print "¥〜\ア゜イ゛"'toHank;        // → \~\ア゚イ゙
T'toHira → カタカナ→ひらかな変換文字列 機能: 対象の文字列 T 内の全角カタカナを全角ひらかなに変換した文字列を返します 説明: 全角カタカナ以外の文字はそのままです。     但し、全角カタカナの「ヴヵヶ」は、対応するひらかながないのでそのままです。     半角カタカナを全角ひらかなに変換するには、      半角カタカナを全角カタカナに変換しておいてから変換する必要があります。 用例:
        print "アイウエオ"'toHira;        // → あいうえお
        print "ガギグゲゴ"'toHira;        // → がぎぐげご
        print "ヰヱヲンヴヵヶ"'toHira;    // → ゐゑをんヴヵヶ
        print "アイウエオ"'toZenk'toHira;      // → あいうえお
        print "To: ハル子"'toHira;        // → To: はる子
T'toKata → ひらかな→カタカナ変換文字列 機能: 対象の文字列 T 内の全角ひらかなを全角カタカナに変換した文字列を返します 説明: 全角ひらかな以外の文字はそのままです。 用例:
        print "あいうえお"'toKata;        // → アイウエオ
        print "がぎぐげご"'toKata;        // → ガギグゲゴ
        print "ゐゑをん"'toKata;          // → ヰヱヲン
        print "From: はる子"'toKata;      // → From: ハル子
●比較 T'icmp( A ) → 大小文字区別なし比較結果 機能: 対象の文字列 T と文字列 A を大小文字の区別なしに比較した結果を返します 説明: 両文字列内の各文字コードを先頭から順に比較していきます。     その際、大文字は小文字に変換して比較します。     この変換は、英語だけでなく、各種言語のアルファベット文字や、       全角のアルファベットに対しても行なわれます。     この比較結果は、次の意味を持つ整数値として返します。      0: 両者は同じ, 負: 前者は後者より先順, 正: 前者は後者より後順 用例:
        print "ABCxyz"'icmp( "abcXYZ" );    // → 0
        print "abc+"'icmp( "ABC-" );        // → -2
        print "ABC"'icmp( "abc" );    // → -33
        print "アイウ"'icmp( "あいう" );    // → 161
T'wcmp( A ) → ワイルドカード比較結果 機能: 対象の文字列 T と文字列 A をワイルドカードで比較した結果を返します 説明: ワイルドカードには次の2種類の文字があります。       * どの文字列とも一致します(空文字列とも一致)       ? どの1字とも一致します     文字列 A 内に、ワイルドカード文字を含めることができます。     対象文字列 T 内に、ワイルドカード文字があっても通常文字として扱います。     大文字は小文字に変換して比較します。この変換は、英語だけでなく各種言語の       アルファベット文字や全角のアルファベットに対しても行なわれます。     この比較の結果として、      両文字列が一致すれば、0 の整数値を返します。      両文字列が一致しなければ、0 以外の整数値を返します。 用例:
        print "xyz.c"'wcmp( "*.c" );      // → 0
        print "xyz.c"'wcmp( "*.h" );      // → 53
        print "12345"'wcmp( "1?3?5" );    // → 0
        print "ABCxyz"'wcmp( "A*xy?" );   // → 0
        print "イロハ"'wcmp( "イロ?" );   // → 0
        print "美しい"'wcmp( "*い" );     // → 0
        print "花子"'wcmp( "??子" );      // → -23376
T'jcmp( A ) → 日本語辞書順の比較結果 機能: 対象の文字列 T と文字列 A を日本語の辞書順に比較した結果を返します。 説明: この「辞書順」では、日本語の「かな」は、まず、次のようにしてから、     50音順で比較します。       ・ひらかなとカタカナを同一視  (例: あ ⇔ ア )       ・カタカナの全角と半角を同一視 (例: イ ⇔ イ )       ・大小字の区別なし       (例: う ⇔ ぅ )       ・濁点と半濁点を無視      (例: は ⇔ ば ⇔ ぱ )       ・「ー」は前字の母音字と同字  (例: キー ⇔ キイ )       ・「ゝ」は前字ひらかなと同字  (例: やゝ ⇔ やや )       ・「ゞ」は前字ひらかな+濁点  (例: はゞ ⇔ はば )       ・「ヽ」は前字カタカナと同字  (例: マヽ ⇔ ママ )       ・「ヾ」は前字カタカナ+濁点  (例: スヾ ⇔ スズ )     これで順が決まらないときは、次の優先順で決めます。なお、以下の表記で、     「A < B」は、AがBよりも先順であることを示します。       (1) 半濁点 無 < 有    (例: は < ぱ )       (2) 濁点 無 < 有     (例: ひ < び )       (3) 「ー」の代替が先順  (例: あー < ああ )       (4) 小字 < 大字     (例: ぃ < い )       (5) 「ゝゞヽヾ」代替が先順(例: あゝ < ああ )       (6) 全角 < 半角     (例: イ < ィ )       (7) ひらかな < カタカナ (例: う < ウ )     このようにして比較した例を、以下に示します。        あー < あぁ < あゝ < ああ        たゝ < たた < たゞ < ただ        は < ハ < ハ < ば < バ < バ < ぱ < パ < パ     英字は、まず、大文字と小文字、半角と全角を区別せずに、アルファベット順で     比較します。これで順が決まらなければ、次に「半角 < 全角」の順で決めます。     それでも決まらなければ、「大文字 < 小文字」の順で決めます。      (例) ABC < ABC < abc < XYZ     数字は、数字列の値としての順になります。数字の全角と半角は、まずは区別し     ませんが、それで順が決まらなければ、「半角 < 全角」の順で決めます。なお、     0 が先頭にある場合は、その方が先順になります。      (例) 078 < 78 < 78 < 123     全角空白は、まず、半角空白と区別なしに扱い、それで順が決まらないときは、     半角空白の方を先順にします。 補説: 本関数で正規に扱うのは、日本語の「かな」、英字アルファベット、数字です。     その他の文字は、単純に文字コードを比較しているだけです。     「ー」「ゝ」「ゞ」「ヽ」「ヾ」は、前字が不正な場合、代替せずに、そのまま     扱います。 参考: ⇒ 日本語文字列照合順番 用例: 本関数を使って、文字列を日本語の辞書順に並べ替える例を示します。
        T =  // 並べ替える前の文字列群(順番は不定)
        {
            "23", "パ", "ぱ", "バ", "ABC", "たゞ", "ウオヽ", "abc", "パ",
            "たた", "うぉー", "ああ", "あぁ", "あゝ", "ば", "は", "ハ",
            "たゝ", "ただ", "ウォー", "ハ", "123", "あー", "バ", "23",
            "023", "BCD", "ウォー", "ABC",
        };
        // この配列内の文字列群を、日本語の辞書順に並べ替えてプリント
        do T'sort with a, b { return a'jcmp( b ); };
        for( p := T'first ; p'ref? ; p := T'next )
            print p;
    このスクリプトを実行すると、次のようにプリントされます。       023       23       23       123       ABC       ABC       abc       BCD       あー       あぁ       あゝ       ああ       うぉー       ウォー       ウオヽ       ウォー       たゝ       たた       たゞ       ただ       は       ハ       ハ       ば       バ       バ       ぱ       パ       パ ●正規表現による操作 T'match( r, m0, m1, m2, ... ) 機能: 対象の文字列 T を正規表現 r と照合して一致した部分を       箱 m0, m1, m2, ... に格納します 引数: r : 照合パターンを規定する正規表現の文字列     m0: 正規表現全体と一致する文字列部を格納する箱     m1, m2 , ... : 正規表現内の第 1, 2, ... 番目の参照グループ( @(...) 部 )       のパターンに一致する文字列部を格納する箱 返値: 照合(検索)を実施した場合:       >= 0: 一致パターンの識別値( デフォールトは 0 )       = -1: 不一致       = -2: ユーザー要求による検索中断       = -3: 検索経路が多過ぎる       = -4: 致命的エラー     照合(検索)を実施しなかった場合:       = 正規表現の文法エラー識別ビット     エラーの場合:       = null 説明: 対象文字列 T の先頭から正規表現 r のパターンを検索して、最初に見つかった     ところで照合して、その正規表現パターン全体との一致部を、箱 m0 に格納し、     各部分パターンとの一致部を、箱 m1, m2 , ... に格納します。     この関数での検索は、最初に見つかるところまでで、それ以降は行ないません。     連続して検索を行なう場合は、Buffer クラスの関数を使います。     この関数は、また、正規表現の文法エラーを確認するのにも使えます。その場合、     対象文字列 T を省略して、正規表現 r だけでコールします。この関数では、     対象文字列 T が省略/不正の場合、正規表現 r が有効なら、その設定(登録)     が行なわれるだけで、照合(検索)は実行されません。その場合、返値は、その     正規表現の文法エラーの内容を示す整数値になります。この値は各種文法エラー     を示すビットで構成されています。この詳細は、「正規表現」の章の        ・正規表現の文法エラー識別ビット     の節で述べています。     この関数のこのような正規表現 r だけでのコールは、正規表現の事前設定を、     行なう場合にも使います。この事前設定をしておくと、それ以降、同じ正規表現     でこの関数をコールする場合に、正規表現 r の指定を省略できます。この場合、     前回の正規表現の解読結果が利用されるので、毎回新規に解読するよりもかなり     速くなります。     このような正規表現の事前設定は、'match, 'split, 'field, 'subst の各関数で     共通に反映されます。例えば、'match で事前設定した正規表現は、'split 等でも     使えます。また、これらの関数は、個別にも事前設定できます。例えば、'match     で事前設定した正規表現とは別の正規表現を、'split 等で事前設定できます。 補説: m0, m1, m2 , ... の箱は、      ・本関数では新規生成しないので、既存の箱を指定する必要があります。      ・省略/不正の場合、当該一致部の文字列は代入されません。      ・当該一致部がない場合、空になります。      ・対象文字列 T が箱でそれと同一の場合、その箱には代入されません。     r の正規表現が省略/不正の場合、      前回と同じ正規表現が使われます。これについては、既に述べた通りです。      なお、この場合に、対象文字列 T も省略/不正の場合は、前回の正規表現の      文法エラーの内容を示す整数値が返されます。     正規表現に文法エラーがあっても所定の方策で解釈されて、処理は継続されます。     本関数でエラーになるのは、致命的エラー(メモリー不足等)の場合だけです。 例1:
        "--AAABBBCCC--"
            'match( "@(A+)@(B+)@(C+)", x'new!, a'new!, b'new!, c'new! );
        print x, a, b, c;   // → AAABBBCCC, AAA, BBB, CCC
例2:
        // 空白区切りの年月日の文字列から、各年月日を抽出する
        " 1974 3 21 "'match( $"\s*@(\d+)\s+@(\d+)\s+@(\d+)",
                date'new!, Y'new!, M'new!, D'new! );
        print date, Y, M, D;            // → 1974 3 21, 1974, 3, 21
        print ##${Y}年${M}月${D}日##;   // → 1974年3月21日
例3:
        // 正規表現の文法エラー確認と事前設定
        regex = $"*P\.\d+)";
        if(( err_bits = 'match( regex )) != 0 )
            print "正規表現「" : regex : "」に文法エラー " :
                        err_bits'b(10) : " があります!";
        // 事前に設定された正規表現で照合
        "-- P.123 --"'match( , m'new! );
        print m;
   実行結果: 正規表現「*P\.\d+)」に文法エラー 0000010001 があります! P.123 T'split( r, f ) 機能: 対象の文字列 T を正規表現 r をセパレータとして分割した各フィールドを       連想配列 f に順に格納します 引数: r : 区切りのパターンを規定する正規表現の文字列     f : 各フィールドの文字列を格納する連想配列の箱名       ( 第 1, 2, ... のフィールドは、f[0], f[1], ... に格納されます ) 返値: フィールド数     ( エラー時は、null になります ) 説明: 対象文字列 T の先頭から末尾まで、正規表現 r のパターンを検索していって、     対象文字列を、正規表現に一致する部分と一致しない部分に分けます。ここで、     正規表現に一致する部分が区切りで、一致しない部分がフィールドになります。     このようにして抽出された各フィールドの文字列は、連想配列 f[i] の各要素に     格納されます。なお、i = 0, 1, 2, .... の順で、各フィールドに対応します。     例えば、対象文字列が 「AAA,BBB,CCC」 で、正規表現パターンが 「,」 の場合は、     「AAA」, 「BBB」, 「CCC」 の3フィールドが抽出されて、これらの文字列はそれぞれ、     f[0], f[1], f[2] に格納されます。 補説: 連想配列 f の箱は、      ・本関数では新規生成しないので、既存の箱を指定する必要があります。      ・各フィールド文字列の格納直前に、空の「箱を入れる箱」に変更されます。      ・省略/不正の場合、各フィールド部の文字列は格納されません。      ・対象文字列 T が箱で、それと同一の場合には、エラーになります。     正規表現の事前設定と、正規表現の文法エラーの確認/対処に関しては、     'match の説明で述べた内容と同じです。     正規表現 r が空文字列と一致する時は、区切りがないのと同等に扱われます。     本関数と後述の 'field 関数は、フィールドの格納の仕方が異なっていますが、     機能的にはよく似ています。 例1:
        "AAA BBB \t CCC"'split( $"\s+", F'new! );
        print F[0], F[1], F[2];    // → AAA, BBB, CCC
例2:
        n = "XXX , YYY, \t ZZZ"'split( $"\s*,\s*", Field'new! );
        for( i = 0 ; i < n ; i++ )
            print Field[i];
   実行結果: XXX YYY ZZZ T'field( r, f1, f2, ... , fn ) 機能: 対象の文字列 T を正規表現 r を区切りとして各フィールドに分割して、       箱 f1, f2, ... , fn に格納します 引数: r : 区切りのパターンを規定する正規表現の文字列     f1, f2, ... , fn :       第 1, 2, ... , 最後 のフィールドの文字列を格納する箱 返値: 対象文字列内で検出した区切りパターンの数     ( エラー時は、null になります ) 説明: 対象文字列 T の先頭から末尾まで、正規表現 r のパターンを検索していきます。     すると、対象文字列は、正規表現に一致する部分と一致しない部分に分かれます。     そこで、正規表現に一致しない部分がフィールドになり、一致する部分が区切り     になります。例えば、対象文字列を 「AAA,BBB,CCC」 、正規表現パターンを 「,」     とすると、「AAA」, 「BBB」, 「CCC」 の3フィールドに分割されます。各フィールド     の文字列は、箱 f1, f2, ... , fn に順に格納されます。フィールドの数の方が     格納箱の数よりも少ない場合、余った箱は空になります。逆に、フィールドの数     の方が格納箱の数よりも多い場合、最後の箱に残りの全文字列が格納されます。     この文字列には区切りも含まれます。例えば、先程の例で、格納箱の数の違いに     によって、各箱に格納される文字列は、次のようになります。       f1 → f1 = 「AAA,BBB,CCC」       f1, f2 → f1 = 「AAA」, f2 = 「BBB,CCC」       f1, f2, f3 → f1 = 「AAA」, f2 = 「BBB」, f3 = 「CCC」       f1, f2, f3, f4 → f1 = 「AAA」, f2 = 「BBB」, f3 = 「CCC」, f4 = 空 補説: f1, f2, ... , fn の箱は、      ・本関数では新規生成しないので、既存の箱を指定する必要があります。      ・省略/不正の場合、当該フィールド部の文字列は代入されません。      ・対象文字列 T が箱でそれと同一の場合、その箱には代入されません。     正規表現 r が空文字列と一致する時は、区切りがないのと同等に扱われます。     正規表現の事前設定と、正規表現の文法エラーの確認/対処に関しては、     'match の説明で述べた内容と同じです。     本関数と前述の 'split 関数は、フィールドの格納の仕方が異なっていますが、     機能的にはよく似ています。 例1:
        "AAA BBB \t CCC"'field( $"\s+", A'new!, B'new!, C'new!, D'new! );
        print A, B, C, D;     // → AAA, BBB, CCC, <null>
例2:
        'field( $"\s*,\s*" );     // 事前に正規表現を設定しておく
        S = "XXX , YYY, \t ZZZ";
        F'new!;
        while( ( T = S ) != null )
        {
            T'field( , F, S );    // 前回と同じ正規表現を使用
            print F;
        }
   実行結果: XXX YYY ZZZ T'subst( r, s, n, a1, a2, a3 ) 機能: 対象の文字列 T と正規表現 r が一致する部分を      文字列 s, 回数 n, 連想配列 a1, a2, a3 によって置換した文字列を返します 引数: r : 置換部分を規定する正規表現の文字列     s : 置換文字列     n : 置換回数     a1, a2, a3 : 部分一致文字列の変換用連想配列     なお、これらの引数はどれでも省略可能です。 返値: 置換後の文字列     ( エラー時は、null になります ) 説明: 対象文字列 T を検索して、正規表現 r のパターンと一致する部分を抽出します。     この一致部分を置換文字列 s と置き換えるわけですが、置換文字列そのものと     単純に置き換えるのではなく、置換文字列 s 内に、       @0 @1 @2 ... @9 \0 \1 \2 ... \9 @@ \\     という特別な表記があれば、これを下記のように変換してから、置き換えます。     @1, @2, ..., @9 は、それぞれ、      a1, a2, a3 のどの連想配列も省略されている場合:       正規表現内の第 1,2,...9 番目の @(...) のパターンと一致した文字列部に       変換します。      a1, a2, a3 のどれかの連想配列が指定されている場合:       正規表現内の第 1,2,...9 番目の @(...) のパターンと一致した文字列部を、       連想配列 a1, a2, a3 のインデックスとして想起される文字列に変換します。       その際、a1, a2, a3 の順に確認して、省略/不正や文字列が想起されない       ものは除外して、最初に想起される文字列を採用します。どの連想配列から       も有効な文字列が想起されない時は、どの連想配列も省略されている場合と       同様に、@(...) のパターンと一致した文字列部に変換します。     @0 は、      a1, a2, a3 のどの連想配列も省略されている場合:       正規表現全体のパターンと一致した文字列部に変換します。      a1, a2, a3 のどれかの連想配列が指定されている場合:       正規表現全体のパターンと一致した文字列部を、連想配列 a1, a2, a3 の       インデックスとして想起される文字列に変換します。なお、その際の処理は、       @1, @2, ..., @9 の場合と同様です。     \1, \2, ..., \9 は、それぞれ、連想配列とは無関係に、       正規表現内の第 1,2,...9 番目の @(...) のパターンと一致した文字列部に       変換します。     @@ は、@ に変換します。     \\ は、\ に変換します。     このような置換は、引数の n で指定された回数だけ行なわれます。     この置換回数 n が、      ・省略/不正の時は、全ての一致部が置換されます。      ・0 以下の場合は、置換不履行で、対象の文字列と同じ文字列を返えします。     置換文字列が、省略/不正の時は、空文字列との置換になるので、結局、      対象の文字列内の正規表現と一致する部分が除去されることになります。     正規表現 r との一致部が空文字列の場合、置換はその回だけになります。 補説: 正規表現の事前設定と、正規表現の文法エラーの確認/対処に関しては、     'match の説明で述べた内容と同じです。 例1:
        print "ABC-ABC"'subst( "A", "a", 1 );               // → aBC-ABC
        print "ABC-ABC"'subst( "A", "a" );                  // → aBC-aBC
        print "ABC-ABC"'subst( "@(A)@(B)@(C)", "@3@2@1" );  // → CBA-CBA
        print " 1974 03 21 "'trim'subst( $"\s+", "/" );     // → 1974/03/21
例2:
        // 並列置換: A → X, B → Y, C → Z
        S["A"] = "X";  S["B"] = "Y";  S["C"] = "Z";
        print "ABC-CBA"'subst( "@(A|B|C)", "@1", , S );     // → XYZ-ZYX
例3:
        // 簡易ローマ字→かな置換(一部例示用)
        K["a"] = "あ";   K["ka"] = "か";   K["sa"] = "さ";
        K["i"] = "い";   K["ki"] = "き";   K["si"] = "し";
        K["u"] = "う";   K["ku"] = "く";   K["su"] = "す";
        K["e"] = "え";   K["ke"] = "け";   K["se"] = "せ";
        K["o"] = "お";   K["ko"] = "こ";   K["so"] = "そ";
        print  "aiueo  kakikukeko  sasisuseso"
                  'subst( "@([ks]?[aiueo]))", "「@1」", , K );
   実行結果: 「あ」「い」「う」「え」「お」 「か」「き」「く」「け」「こ」 「さ」「し」「す」「せ」「そ」 ●囲い/区切り/その他 T'quote( q, e ) → 引用符付加文字列 機能: 対象の文字列 T を指定の引用符( q, e )で囲った文字列を返します 説明: q は、引用符の文字コードを指定します。     q に指定できるのは、次のどれかか半角空白に限定されます。      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?     q が省略/不正の時は、二重引用符 `"` が使われます。     e は、エスケープ文字の文字コードを指定します。     e は、対象文字列 T 内に q と同じ文字があった場合、その前に付加されます。     e に指定できるのは、ASCII 文字に限定されます。     e が省略/不正の時は、円記号 \ が使われます。 用例:
        print "abc"'quote;                  // → "abc"
        print "abc\"xyz"'quote;             // → "abc\"xyz"
        print "abc'xyz"'quote( `'` );       // → 'abc\'xyz'
        print "abc\"xyz"'quote( , `"` );    // → "abc""xyz"
T'dequote( q, e ) → 引用符除去文字列 機能: 対象の文字列 T から指定の引用符( q, e )を除去した文字列を返します 説明: q と e は、'quote の場合と同じです。 用例:
        print ##"abc"##'dequote;                // → abc
        print ##"abc\"xyz"##'dequote;           // → abc"xyz
        print ##'abc\'xyz'##'dequote( `'` );    // → abc'xyz
        print ##"abc""xyz"##'dequote( , `"` );  // → abc"xyz
T'ds( c, n ) → 数字3桁毎の区切り付加文字列 機能: 対象の文字列(数値)を指定文字で指定桁毎に区切った文字列を返します 説明: 書式(1) T'ds       対象 T が文字列の場合         その文字列の先頭から 1-9 以外の文字を読み飛ばして、         それ以降、0-9 の文字が続いている所までにおいて、この数字列の         最下位桁から上位桁方向へ3桁毎にコンマを挿入します。       対象 T が数値の場合         その数値を10進文字列に変換して、上記の処理を行ないます。     書式(2) T'ds( c )       基本的に、書式(1)の場合と同様ですが、コンマの代りに、       文字 c を挿入します。     書式(3) T'ds( c, n )       対象 T が文字列の場合         対象の文字が数字か否かの区別なしに、無条件に、         その最下位桁から上位桁方向へ n 桁毎に文字 c を挿入します。       対象 T が数値の場合         その数値を10進文字列に変換して、上記の処理を行ないます。 用例:
 (1) print "1234567890.1234"'ds;             // → 1,234,567,890.1234
 (2) print "000123456789,1234"'ds(`.`);      // → 0001.234.567.890,1234
 (3) print "000123456789ABCDEF"'ds(`\``,4);  // → 00`0123`4567`89AB`CDEF
A'CsvEnc( B, C, ... ) 機能: 対象 A と引数 B, C, ... の文字列を CSV 形式に統合して返します 説明: CSV( Comma Separated Value : コンマ区切り文字列 )に統合される     各フィールドの文字列を、対象 A と引数 B, C, ... に指定します。     これらのフィールドは、その指定順に、コンマで区切って連結されます。     その際、コンマ、二重引用符、改行のどれかを1つ以上含むフィールドは、     二重引用符で囲われます。なお、この囲い内にある各二重引用符は、     連続する2個の二重引用符に置き換えられます。 補説: 対象 A が省略(無指定)の場合、それは無視されます。     省略された引数に対応するフィールドは、空になります。     対象も引数も無い場合は、空文字列が返ります。     各フィールドの値は、文字列で指定しないと空フィールドになります。 注意: フィールドの数は、最大 40 個まで有効です。 用例: ( 以下で、<改行> は、実際には 改行コード になる )
        print "AA"'CsvEnc( "BB", "CC" );        // → AA,BB,CC
        print 'CsvEnc( "AA", "BB", "CC" );      // → AA,BB,CC
        print 'CsvEnc( , "BB", "CC" );          // → ,BB,CC
        print 'CsvEnc( "AA", , "CC" );          // → AA,,CC
        print 'CsvEnc( "AA", "BB",  );          // → AA,BB,
        print 'CsvEnc( "A,A", "B\"B", "C\nC" ); // → "A,A","B""B","C<改行>C"
T'CsvDec( f1, f2, ... , fn ) 機能: 対象 T の CSV 形式の文字列を、各フィールドに分割して、        引数で指定された箱 f1, f2, ... , fn に代入します 返値: フィールドの文字列を代入した箱の個数 or null(エラー時) 説明: f1, f2, ... , fn には、代入先となる既存の箱を指定します。     f1, f2, ... , fn に、箱でないもの、つまり、代入先になれないものが       指定された場合、それに対応するフィールドは、無視されます。     f1, f2, ... , fn に対応するフィールドが空の場合、       その箱には空文字列が代入されます。(空箱にはなりません。)     f1, f2, ... , fn の個数よりも、フィールドの個数の方が多い場合、       fn に残りの文字列がそのまま(分割されずに)代入されます。     f1, f2, ... , fn の個数よりも、フィールドの個数の方が少ない場合、       余った箱は、空箱になります。(空文字列にはなりません。)     f1, f2, ... , fn のうちに、対象の箱と同じ箱がある場合、       その箱には代入されません。 詳説:    ・フィールドの最初の文字が二重引用符の場合に限り、二重引用符フィールド       として扱われ、それ以外は、通常フィールドとして扱われます。    ・二重引用符フィールド内のコンマ、改行は、通常文字として扱われます。    ・二重引用符フィールド内の連続した2個の二重引用符は、       1個の二重引用符に置き換わります。    ・二重引用符フィールドの先頭と末尾の二重引用符は、       代入される文字列に含まれません。    ・二重引用符フィールドが、二重引用符で閉じた後は、       次のコンマまで読み飛ばされます。    ・通常フィールドでは、二重引用符や改行も、通常文字として扱われます。 例1:
        ( A, B, C ) = null;     // 空箱 A, B, C の生成
        print A, B, C;          // → <null>, <null>, <null>
        print "AA,BB,CC"'CsvDec( A, B, C ), A, B, C;        // → 3, AA, BB, CC
        print ",BB,CC"'CsvDec( A, B, C ), A, B, C;          // → 3, , BB, CC
        print "AA,,CC"'CsvDec( A, B, C ), A, B, C;          // → 3, AA, , CC
        print "AA,BB,"'CsvDec( A, B, C ), A, B, C;          // → 3, AA, BB, 
        print "AA,BB,CC,DD,EE"'CsvDec( A, B, C ), A, B, C;  // → 3, AA, BB, CC,DD,EE
例2:
        R = ##AAA,"BBB","CC,""DD"",EE", FFF##;
        while(( T = R ) != null )
        {
            T'CsvDec( A, R );
            print A;
        }
   実行結果:     AAA     BBB     CC,"DD",EE      FFF A'TsvEnc( B, C, ... ) 機能: 対象 A と引数 B, C, ... の文字列を TSV 形式に統合して返します 説明: TSV( Tab Separated Value : タブ区切り文字列 )に統合される     各フィールドの文字列を、対象 A と引数 B, C, ... に指定します。     これらのフィールドは、その指定順に、タブで区切って連結されます。     本形式では、フィールドを二重引用符で囲うことはありません。       それは、処理を高速かつ簡素に行えるようにするためです。       従って、どのフィールドにも、区切り文字のタブは含められません。       もし含めれば、本来の区切りでは扱えなくなってしまいます。       また、本形式では、フィールドに改行が含まれていても、       特別な扱いはされません。(通常の文字と同じ扱いです。) 補説: 対象 A が省略(無指定)の場合、それは無視されます。     省略された引数に対応するフィールドは、空になります。     対象も引数も無い時は、空文字列が返ります。     各フィールドの値は、文字列で指定しないと空フィールドになります。 注意: フィールドの数は、最大 40 個まで有効です。 用例: ( 以下で、実際には、<tab> は TAB コード、<改行> は 改行コード になる )
        print "AA"'TsvEnc( "BB", "CC" );         // → AA<tab>BB<tab>CC
        print 'TsvEnc( "AA", "BB", "CC" );       // → AA<tab>BB<tab>CC
        print 'TsvEnc( , "BB", "CC" );           // → <tab>BB<tab>CC
        print 'TsvEnc( "AA", , "CC" );           // → AA<tab><tab>CC
        print 'TsvEnc( "AA", "BB",  );           // → AA<tab>BB<tab>
        print 'TsvEnc( "A,A", "B\"B", "C\nC" );  // → A,A<tab>B"B<tab>C<改行>C
T'TsvDec( f1, f2, ... , fn ) 機能: 対象 T の TSV 形式の文字列を、各フィールドに分割して、        引数で指定された箱 f1, f2, ... , fn に代入します 返値: フィールドの文字列を代入した箱の個数 or null(エラー時) 説明: f1, f2, ... , fn には、代入先となる既存の箱を指定します。     f1, f2, ... , fn に、箱でないもの、つまり、代入先になれないものが       指定された場合、それに対応するフィールドは、無視されます。     f1, f2, ... , fn に対応するフィールドが空の場合、       その箱には空文字列が代入されます。(空箱にはなりません。)     f1, f2, ... , fn の個数よりも、フィールドの個数の方が多い場合、       fn に残りの文字列がそのまま(分割されずに)代入されます。     f1, f2, ... , fn の個数よりも、フィールドの個数の方が少ない場合、       余った箱は、空箱になります。(空文字列にはなりません。)     f1, f2, ... , fn のうちに、対象の箱と同じ箱がある場合、       その箱には代入されません。     f1, f2, ... , fn に代入される文字列内に、改行が含まれることは       ありますが、区切りのタブが含まれることはありません。 例1: ( 以下で、<tab> は 実際には TAB コード になる )
        ( A, B, C ) = null;     // 空箱 A, B, C の生成
        print A, B, C;          //  → <null>, <null>, <null>
        print "AA\tBB\tCC"'TsvDec( A, B, C ), A, B, C;          // → 3, AA, BB, CC
        print "\tBB\tCC"'TsvDec( A, B, C ), A, B, C;            // → 3, , BB, CC
        print "AA\t\tCC"'TsvDec( A, B, C ), A, B, C;            // → 3, AA, , CC
        print "AA\tBB\t"'TsvDec( A, B, C ), A, B, C;            // → 3, AA, BB, 
        print "AA\tBB\tCC\tDD\tEE"'TsvDec( A, B, C ), A, B, C;  // → 3, AA, BB, CC<tab>DD<tab>EE
例2: ( 以下で、<tab> は 実際には TAB コード になる )
        R = ##AAA<tab>"BBB"<tab>"CC<tab>""DD""<tab>EE"<tab> FFF##;
        while(( T = R ) != null )
        {
            T'TsvDec( A, R );
            print A;
        }
   実行結果:     AAA     "BBB"     "CC     ""DD""     EE"      FFF T'UrlEnc → URL エンコード文字列 機能: 対象の文字列を URL エンコードした文字列を返します 説明: 対象の文字列は、まず UTF-8 に変換されてから、URL エンコードされます。 用例:
        print "abc-xyz"'UrlEnc;       // → abc-xyz
        print "ABC イロハ"'UrlEnc;    // → ABC+%E3%82%A4%E3%83%AD%E3%83%8F
T'UrlDec → URL デコード文字列 機能: URL エンコードされた文字列を元に戻します 説明: UTF-8 で URL エンコードされた対象の文字列を元の文字列に戻して返します。 用例:
        print "abc-xyz"'UrlDec;       // → abc-xyz
        print "ABC+%E3%82%A4%E3%83%AD%E3%83%8F"'UrlDec;  // → ABC イロハ
●文字コード符号化方式  本言語では、文字列の内部処理は UTF-16(LE) で行なっていますが、文字列のデータを、 ファイルに格納したり、外部プログラムとやり取りするときなどには、各種の符号化方式 に変換する必要がある場合がよくあります。  本言語で扱える文字コード符号化方式とその指定名の一覧を、以下にを挙げます。 ここで、指定名というのは、関連関数(下記関数一覧参照)の cse という引数に指定 する名称のことです。なお、指定名に、"ACP" を指定した場合、現コードページの 符号化方式になります。
指定名符号化方式
 "UTF-16(LE)"  ユニコード UTF-16(LE)
 "UTF-16(BE)"    〃   UTF-16(BE)
 "UTF-8"     〃   UTF-8
 "UTF-7"     〃   UTF-7
 "UTF-32(LE)"    〃   UTF-32(LE)
 "UTF-32(BE)"    〃   UTF-32(BE)
 "Shift-JIS"   標準シフトJIS( CP-932 )
 "XSJIS"   拡張シフトJIS( JIS-X0213 対応 )
 "EUC-JP"   日本語用 UNIX コード
 "JIS"   ISO-2022-JP
 "GBK"   簡体字中国語
 "BIG5"   繁体字中国語
 "UHC"   韓国語
 "CP-1250"   中央ヨーロッパ語
 "CP-1251"   キリル語
 "CP-1252"   西ヨーロッパ語
 "CP-1253"   ギリシャ語
 "CP-1254"   トルコ語
 "CP-1255"   ヘブライ語
 "CP-1256"   アラビア語
 "CP-1257"   バルト語
 "CP-1258"   ベトナム語
 "CP-874"   タイ語
 内部形式の文字コード( UTF-16(LE) )から、バイト単位の符号化方式( Shift-JIS, CP-1252 など )への変換で、正規に変換できないコードは、0x7F(ASCII DEL コード) に変換されます。一方、特定の符号化方式の文字コードから、内部形式の文字コード ( UTF-16(LE) )への変換で、正規に変換できないコードは、U+FFFD に変換されます。  本言語の文字コード符号化方式の変換に関連した関数の一覧を、以下に挙げます。 各機能の詳細は、それぞれのリンク先をご覧ください。   ・file .DetectEnc( size )   ・file .Write( 文字列 )   ・buffer .DetectEnc( size )   ・buffer .Decode( cse, size )   ・buffer .Encode( cse, size, bom )   ・buffer .Write( 文字列 )   ・'CharEnc( cse, eol, irc )   ・'T( n )   ・'LINE or 'LN   ・'CSZ   ・'ps( s, cse )   ・::Process( cmd, show, stdin, stdout, stderr, cse )   ・::DLL.Link( file_name, flag, cse )   ・dll .GetEntry( func_name, type, cse ) これらの関数のうち、'CharEnc だけは、以下で説明しています。 'CharEnc( cse, eol, irc )  文字コード符号化方式の指定 機能: 入出力時等の文字コード符号化方式を指定 説明: 本関数で文字コード符号化方式を指定しておくと、文字列をファイル/バッファ     に入出力する時や、DLL関数の引数で文字列を渡す時や、外部プログラムと     標準入出力でやり取りするときなどに、次の変換が自動的に行なわれます。      ・出力: 内部形式 → 指定の符号化方式      ・入力: 内部形式 ← 指定の符号化方式 引数: cse: 文字符号化方式の名称( ⇒ 参照 )     eol: 改行コード種別( 下記「補注」参照 )     irc: 不正コードの代替コード(現在未使用) 返値: 引数 cse の指定に該当する符号化方式がある場合、その(正式)名称。     なお、該当する符号化方式が無い場合は、"Unknown" が返ります。     また、cse に "?" を指定した場合、現在の符号化方式の名称が返ります。 補説: 次の関数では、本関数の指定が直接影響します。      ・'T      ・'LINE, 'LN      ・'CSZ      ・file .Write( 文字列 )      ・buffer .Write( 文字列 )     次の関数では、引数 cse を省略した時に、本関数の指定が適用されます。      ・buffer .Encode( cse, size, bom )      ・buffer .Decode( cse, size )      ・'ps( s, cse )      ・::Process( cmd, show, stdin, stdout, stderr, cse )      ・::DLL.Link( file_name, flag, cse )      ・dll .GetEntry( func_name, type, cse ) 注意: 本関数による符号化方式の指定が無ければ(デフォールトでは)、内部形式の     UTF-16(LE) の文字コードで入出力されます。現状、ファイルや標準入出力には、     ASCII/Shift-JIS が使われていることもよくありますが、その場合には、       'CharEnc( "Shift-JIS" );     等と事前に設定しておく必要があります。デフォールトのままでは、文字化けに     なるのでご注意ください。 補注: 引数 eol は、省略するか、"CR+LF", "LF", "CR" のどれかを指定します。現状、     この指定は 出力時の 'LINE, 'LN にだけ影響します。 用例: