CHARACTER*(*) string, substr n = INDEX (string, substr)
INTEGER*4 FUNCTION rindex CHARACTER*(*) string, substr n = rindex (string, substr)
INTEGER*4 FUNCTION lnblnk CHARACTER*(*) string n = lnblnk (string)
CHARACTER*(*) string n = LEN (string)
INDEX(a1,a2) は、文字列 a1 内で最初に現れた文字列 a2 のインデックスを返します。存在しない場合は、ゼロを返します (組み込み関数)。
rindex(a1,a2) は、文字列 a1 内で最後に現れた文字列 a2 のインデックスを返します。存在しない場合は、ゼロを返します。
lnblnk( a1 ) は、a1 内の空白以外の最後の文字のインデックスを返します。すべての f77 文字オブジェクトは固定長であり、空白でパディングされているため、この関数が役立ちます。
LEN は、文字列引数の宣言されたサイズを返します (組み込み関数)。
64 ビット環境用に (コンパイラオプション -m64 を付けて) コンパイルすると、ルーチン len、index、rindex、lnblnk は、2G バイト以上の非常に大きな文字列に適用した場合に、INTEGER*4 データのデータ範囲を超える値を返すことがあります。このような状況では、結果を受け取る変数とともに、これらの関数を INTEGER*8 と宣言する必要があります。
Example: LEN(), INDEX(), rindex() , lnblnk()(): CHARACTER s*32 / '123456789 123456789 1234' / INTEGER*4 declen, first, last, lnblnk, rindex declen = LEN( s ) first = INDEX( s, '123' ) last = rindex( s, '123' ) lastnb = lnblnk( s ) PRINT*, declen, lastnb, first, last END demo% f77 -silent tindex.f demo% a.out 32 24 1 21 demo%
上記の例では、declen は 24 ではなく、32 です。これは文字変数の宣言された長さであり、これに含まれる文字列の長さではありません。
libfui.a