words("string") は、文字列 (string) の単語数を返します。例えば、 words(" a b c d") は 4 を返します。
関数 word と words は、単一引用符、二重引用符で囲まれた文字列も、 限定的ですがサポートしています:
print words("\"double quotes\" or 'single quotes'") # 3
開始引用符の前は、スペースか、または文字列の先頭でなければいけません。 これは、単語内、あるいは単語終わりにつくアポストロフィー (') は、それ ぞれの単語の要素であると見なされることを意味します:
print words("Alexis' phone doesn't work") # 4
引用符文字のエスケープはサポートしていませんので、ある引用符を維持した い場合は、それぞれを別の種類の引用符で囲まなければいけません:
s = "Keep \"'single quotes'\" or '\"double quotes\"'" print word(s, 2) # 'single quotes' print word(s, 4) # "double quotes"
最後の例では、引用符のエスケープが文字列の定義時のみに必要であることに 注意してください。
split("string", "sep") は、 split("string", "sep") は、"sep" 内の文字をフィールドの区切りとして 使用し、文字列 "string" の中身を個々のフィールドに切り分けます。これは、 その要素が元の文字列のフィールドにそれぞれ対応する文字列の配列を返しま す。2 つ目のパラメータ "sep" はオプションで、"sep" を省略した場合、ま たは空白文字一つである場合は、フィールド文字列を任意個のホワイトスペー ス (スペース、タブ、改ページ、改行、復帰) で切り分けます。それ以外の場 合は、区切りは "sep" 内の完全な文字列にマッチする必要があります。
以下の 3 つの例は、いずれも配列 [ "A", "B", "C", "D" ] を生成します。
t1 = split( "A B C D" ) t2 = split( "A B C D", " ") t3 = split( "A;B;C;D", ";")
しかし、以下のコマンド
t4 = split( "A;B; C;D", "; " )
は、2 つの文字列のみを持つ配列 [ "A;B", "C;D" ] を生成しますが、それは、 2 文字のフィールド区切り文字列 "; " が 1 つしか見つからないからです。
注意: 文字列を、1 文字ずつの配列に保存するために、区切りとして空文字を 設定することは、現在は実装されていません。それは、代わりに 1 文字の部 分文字列を使うことで実現できます: Array[i] = "string"[i:i]
join(array, "sep") は、配列の文字列要素を、"sep" の文字列で区切られ たフィールドの列として一つの文字列に連結します。文字列でない配列要素は、 空のフィールドを生成します。この逆に split 関数は一つの文字列を複数 のフィールドに切り分けて一つの配列を生成します。 例:
array A = ["A", "B", , 7, "E"] print join(A,";") A;B;;;E
trim(" padded string ") は、元の文字列の前後にある空白部分を取り除 いた文字列を返します。これは、余計な空白を持ちうる入力データ列の文字列 同士を比較する際に有用です。例:
plot FOO using 1:( trim(strcol(3)) eq "A" ? $2 : NaN )
竹野茂治@新潟工科大学