文字部分列

文字部分列とは,文字列の連続した一部分です。これは以下のいずれかの形式を取ります。

v ([e1]:[e2])
a (s [, s]...) ([e1]:[e2])

v
文字スカラ定数,または文字スカラ変数か文字構造体成分の名前。

e1
部分列の左端の文字位置を宣言するスカラ整数 (またはその他の数値) 式。開始位置と呼ばれます。

e2
部分列の右端の文字位置を宣言するスカラ整数 (またはその他の数値) 式。終了位置と呼ばれます。

a
文字配列の名前。

s
添字式。

e1e2 は,どちらも 1,2,...,len の範囲に入っていなければなりません。len は親文字列の長さです。e1e2 よりも大きい場合,部分列の長さはゼロとなります。

規則と振る舞い

親文字列の中での文字位置は,1 から始まり,左から右に向かって数えられます。

数値式 e1 または e2 の値が整数型でない場合,使用前に整数に変換されます (小数部は切り捨てられます)。

e1 が省略された場合の基本値は 1 です。e2 が省略された場合の基本値は len です。たとえば,NAMES(1,3)(:7) は,文字配列要素 NAMES(1,3) の,最初の文字位置から始まり,7 番目の文字位置で終わる文字部分列を宣言します。

次の例を考えます。

	CHARACTER*8 C, LABEL
	LABEL = 'XVERSUSY'
	C = LABEL(2:7)

LABEL(2:7) は,LABEL に代入されている文字変数の 2 番目の文字位置で始まり,7 番目の文字位置で終わる部分列を宣言しています。したがって,C の値は「VERSUS」となります。

次の例を考えます。

	TYPE ORGANIZATION
	  INTEGER ID
	  CHARACTER*35 NAME
	END TYPE ORGANIZATION

	TYPE(ORGANIZATION) DIRECTOR
	CHARACTER*25 BRANCH, STATE(50)

以下に示すものは,有効な部分列です。

	BRANCH(3:15)		! 親文字列はスカラ変数です。
	STATE(20) (1:3)		! 親文字列は配列要素です。
	DIRECTOR%NAME		! 親文字列は構造体成分です。

次の例を考えます。

	CHARACTER(*), PARAMETER :: MY_BRANCH = "CHAPTER 204"
	CHARACTER(3) BRANCH_CHAP
	BRANCH_CHAP = MY_BRANCH(9:11)	! 親文字列は文字定数です。

BRANCH_CHAP は,値「204」を持つ長さ 3 の文字列です。

関連情報