use iso_varying_stringtype(VARYING_STRING):: vstring
! 型変換
type(VARYING_STRING):: vstring, vstring2 character(len = 任意):: chars, chars2 integer:: length
vstring = chars vstring = var_str(chars) chars = string chars = char(vstring, [length])
! このほかの手続や演算子の書式は本文中で示します。
可変長文字列と文字型は相互に代入することができます。 文字型変数に長さの違う可変長文字列を代入する場合には、 長さの違う文字型変数相互間の代入と同様に 右側の切捨てか空白の追加が行われます。
文字型の引数を要求する手続 (関数やサブルーチン) に 可変長文字列を渡す場合は char(可変長文字列) のようにすると文字型の式が得られます。 長さの決まった文字型の式が必要な場合は char(可変長文字列, 長さ) のようにします。
可変長文字列の引数を要求する手続に文字型の値を渡す場合には var_str(文字型の式) のようにすると可変長文字列が得られます。
! 連接演算子 character(len = 適当):: chars, chars2 type(VARYING_STRING):: vstring, vstring2chars // chars2 ! 組み込み、文字型 chars // vstring2 ! type(VARYING_STRING) 型 vstring // chars2 ! type(VARYING_STRING) 型 vstring // vstring2 ! type(VARYING_STRING) 型
! 比較演算子と比較関数 character(len = 任意) あるいは type(VARYING_STRING):: string_a, string_b
string_a == string_b ! 同値 string_a /= string_b ! 不等 string_a < string_b ! 辞書順で string が前 string_a <= string_b ! 辞書順で string が前か同値 string_a > string_b ! 辞書順で string が後 string_a >= string_b ! 辞書順で string が後か同値 ! ASCII コードでの比較 logical function lge(string_a, string_b) logical function lgt(string_a, string_b) logical function lle(string_a, string_b) logical function llt(string_a, string_b)
文字型の式の連結を行う // 演算子は可変長文字列にも利用できます。 可変長文字列を含む連結演算の結果は可変長文字列になります。
文字型の式の大小比較を行う ==, >=, >, <=, <, /=, .eq., .ge., .gt., .le., .lt. .ne., 演算子 は可変長文字列にも利用できます。 同様に、すべての文字を ASCII 文字集合における符号の大小によって 比較して大小比較を行う lge, lgt, lle, llt 関数も可変長文字列を引数とすることができます。
character(len = 任意) あるいは type(VARYING_STRING):: string, setinteger:: unit, maxlen, iostat type(VARYING_STRING):: separator
! get の string, separator 引数とすべての iostat 引数は intent(out) subroutine get([unit,] string, [set=set, [separator=separator,]] & & [maxlen=maxlen,] [iostat=iostat]) subroutine put([unit,] string, [iostat=iostat]) subroutine put_line([unit,] string, [iostat=iostat])
順番探査で書式付入力 (書式付出力) として接続されたファイルに対しては、 記録 (UNIX や MS-Windows では行) を単位とした入出力ができます。 入出力対象 string は可変長文字列または文字型のどちらでもかまいません。 GET は記録1つを入力します。 PUT は可変長文字列を出力します。記録を終えませんから、 引き続く PUT の結果は同じ記録にかかれます。 PUT_LINE は記録を終える (UNIX では改行文字が出力される) ことを除いて PUT と同等です。
! substring, set には ! 文字型または type(VARYING_STRING) 型の両方が許容されるlogical:: back character(len = 任意) あるいは type(VARYING_STRING):: string, set, substring
integer function index(string, substring) integer function scan(string, set, [back=back]) integer function verify(string, set, [back=back])
integer:: ncopies type(VARYING_STRING):: string
integer function len(string) integer function len_trim(string) integer function ichar(string) integer function iachar(string) type(VARYING_STRING) function adjustl(string) type(VARYING_STRING) function adjustr(string) type(VARYING_STRING) function repeat(string, ncopies)
組み込み関数 INDEX, SCAN, VERYFY は可変長文字列に関する検査を行うことができます。
logical:: every, back integer:: start, finish character(len = 任意) あるいは type(VARYING_STRING):: string, set, substring, target type(VARYING_STRING):: separator, wordtype(VARYING_STRING) function insert(string, start, substring) type(VARYING_STRING) function remove(string, start, [finish]) type(VARYING_STRING) function extract(string, start, [finish]) type(VARYING_STRING) function & replace(string, start, [finish,] substring) type(VARYING_STRING) function & replace(string, target, substring, [every=every,] [back=back]) ! word, separator 引数は intent(out) subroutine split(string, word, set, [separator,] [back=back])
TBD.
ISO/IEC 1539-2:1994 は可変長文字列を保持するためのインターフェイスを定めています。 本モジュールはこのインターフェイスに従っています。
本モジュールには以下の3つの実装があります:
STRING 構造体は文字列値を格納するための CHARACTER 型成分を直接保持しているわけではなく、 ISO_VARYING_STRING モジュール内の文字列表の添字を成分として持ちます。 文字列表は文字列値、参照カウンタから構成されています。
参照カウンタは VARYING_STRING 構造体変数への格納数を保持しています。 VARYING_STRING 構造体変数に文字列表の添字を格納する際に、 もともと構造体が保持していた番号の参照カウンタが減算されます。 参照カウンタがゼロになると、文字配列のメモリが解放されます。
VARYING_STRING 構造体変数へ格納されることがない (すなわち、関数値として返却されて手続の引数となる) 可変長文字列値の参照カウンタは最初からゼロになっています。 この種の文字配列は最初の参照後十分古くなってから (現在の実装では 64 回以上の文字表生成が経過した後) STRING 構造体変数の整理が行われる際に解放されます。 したがって、十分複雑にネストした関数呼び出しを評価すると 関数の引数であった可変長文字列が解放されて空文字列と誤認される 可能性があります。 (この挙動はメモリリークを防ぐためのものですが、 問題が多いので廃止されるかもしれません)
以下の注意に従うとメモリリーク及び文字列の消失が極小化されます。 VARYING_STRING 構造体を返す関数を別の手続の引数として 利用しないで、いったん VARYING_STRING 型変数に格納してから 手続を呼び出してください。 VARYING_STRING 構造体変数を用いる手続を終了する前に空文字列 '' を 代入してください。 VARYING_STRING 構造体変数を含んだ構造体には 利用者定義代入を定義し、組み込み代入を行わせないでください。
ISO/IEC 1539-2:1994, Information technology - Programming languages - FORTRAN - Part 2: Varying length character strings.