プログラミングユーティリティ

文字列の操作

len() マクロは、引数に含まれている文字列の長さ (文字数) を返します。たとえば、

len(abcdef)

6 を返し、

len((a,b))

5 を返します。

substr() マクロは、文字列の部分文字列を生成します。たとえば以下のマクロは、文字列 si 番目の位置 (起点は 0) から始まる n 文字の部分文字列を返します。

substr(s, i, n)

n が省略されている場合には、i 文字目以降の文字列が返されます。たとえば、以下のように入力すると、

substr(`now is the time',1)

以下の文字列が返されます。

ow is the time

i または n が範囲を超えている場合は、結果は不定です。

index(s1,s2) マクロは、文字列 s1 の中で文字列 s2 が現われる場所のインデックス (位置) を返します。文字列 s2 が含まれていない場合は -1 が返されます。substr() の場合と同様に、文字列の起点は 0 です。

translit() は、文字置換を行います。このマクロの一般形式を以下に示します。

translit(s,f,t)

このマクロは、f に指定された文字を t に指定された対応する文字に置換して s を変更します。

たとえば、以下の入力を使用すると、

translit(s, aeiou, 12345)

母音字はそれに対応する数字に置換されます。tf より短い場合は、t に指定されていない文字は削除されます。t に何も指定されていない場合は、f の中の文字が s から削除されます。

したがって、以下の場合には、s から母音字 a,e,i,o,u がすべて削除されます。

translit(s, aeiou)

マクロ dnl() は、dnl() の後から復帰改行までの文字 (復帰改行も含む) をすべて削除します。このマクロは主に、m4 の出力に必要ない空の行を削除するために使用されます。たとえば、以下を入力すると、定義に含まれない行の終わりは復帰改行になります。

define(N, 100) 
define(M, 200) 
define(L, 300)

したがって、復帰改行を必要としない出力に復帰改行がコピーされます。これらの各行に dnl() を追加すると、復帰改行はなくなります。また、以下のように記述した場合も、同じ結果を得ることができます。

divert(-1) 
define(...) 
...  
divert