INDEX(3F)

名前
index, rindex, lnblnk, len - インデックスまたは部分文字列の長さの取得

形式
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 は、文字列引数の宣言されたサイズを返します。 (組み込み関数)

注意事項
len、 index、 rindex、 lnblnk を 64 ビット環境で使用できるように、 コンパイラオプション -xarch=v9 や v9a を付けてコンパイルを実行すると、 2 GB 以上あるような大きな文字列に適用した場合は、 戻り値が INTEGER*4 のデータ範囲を越えてしまうことがあります。 このような場合は、 関数、 結果を受け取る変数ともに、 INTEGER*8 と宣言する必要があります。

使用例
例: 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 は 32 です。24 ではありません。 これは、文字変数の宣言された長さであり、実際の文字列の長さではありません。

ファイル
libfui.a