ISO_VARYING_STRING(3F)

Date: TOYODA Eizi
Source: 2000-02-18

名前

ISO_VARYING_STRING - 可変長文字列ライブラリ

書式

USE ISO_VARYING_STRING
TYPE(VARYING_STRING):: variable

CALL GET( [unit,] string, [MAXLEN= integralvalue,] [IOSTAT= integralvariable,] )
CALL PUT( [unit,] string, [IOSTAT= integralvariable,] )
CALL PUT_LINE( [unit,] string, [IOSTAT= integralvariable,] )

説明

上記書式によって宣言された VARYING_STRING 構造体 (以下では可変長文字列と呼ぶ) は、任意の長さの文字列を保持することができます。

文字型との相互変換

可変長文字列と文字型は相互に代入することができます。 文字型変数に長さの違う可変長文字列を代入する場合には、 長さの違う文字型変数相互間の代入と同様に 右側の切捨てか空白の追加が行われます。

文字型の引数を要求する手続 (関数やサブルーチン) に 可変長文字列を渡す場合は char(可変長文字列) のようにすると文字型の式が得られます。 長さの決まった文字型の式が必要な場合は char(可変長文字列, 長さ) のようにします。

可変長文字列の引数を要求する手続に文字型の値を渡す場合には var_str(文字型の式) のようにすると可変長文字列が得られます。

組み込み演算子の拡張

文字型の式の連結を行う // 演算子は可変長文字列にも利用できます。 可変長文字列を含む連結演算の結果は可変長文字列になります。

文字型の式の大小比較を行う <, <=, ==, >=, >, /= 演算子は可変長文字列にも利用できます。

入出力

順番探査で書式付入力として接続されたファイルに対しては、 記録 (UNIX や MS-Windows では行) を単位とした入出力ができます。 入出力対象 string は可変長文字列または文字型のどちらでもかまいません。 GET は記録1つを入力します。 PUT は可変長文字列を出力します。記録を終えませんから、 引き続く PUT の結果は同じ記録にかかれます。 PUT_LINE は記録を終えることを除いて PUT と同等です。

文字操作関数

組み込み関数 INDEX, SCAN, VERYFY は可変長文字列に関する検査を行うことができます。

互換性

ISO/IEC 1539-2:1994 は可変長文字列を保持するためのインターフェイスを定めています。 本モジュールはこのインターフェイスに従っています。 ただし DISPOSE 手続は ISO 規格には存在しません。

本モジュールには以下の3つの実装があります:

dc_string_p.f90
正式版。ポインタで任意の長さの文字バッファを割り付けます。
dc_string.f90
簡略版。ポインタを使いませんが 508 文字までの文字列しか扱えません。
dc_string_psr.f90
PSR vf90 用その場しのぎ版。

バグ

複雑な関数呼び出しによる文字列値の欠損 (正式版)

STRING 構造体は文字列値を格納するための CHARACTER 型成分を直接保持しているわけではなく、 ISO_VARYING_STRING モジュール内の文字列表の添字です。 文字列表は文字列値、参照カウンタから構成されています。

参照カウンタは VARYING_STRING 構造体変数への格納数を保持しています。 VARYING_STRING 構造体変数に文字列表の添字を格納する際に、 もともと存在していた番号の参照カウンタが減算されます。 参照カウンタがゼロになると、文字配列のメモリが開放されます。

VARYING_STRING 構造体変数へ格納されることがない (すなわち、関数値として返却されて手続の引数となる) 可変長文字列値の参照カウンタは最初からゼロになっています。 この種の文字配列は十分古くなってから (現在の実装では 64 回以上の文字表生成が経過した後) STRING 構造体変数の整理が行われる際に開放されます。 (この挙動はメモリリークを防ぐために必要です)

したがって、十分複雑な関数呼び出しを評価している途中の 関数の内部で STRING 構造体変数への代入が起こると、 関数の引数であった可変長文字列が開放され、 1文字以上であったはずの文字列が空文字列と誤認される可能性があります。

参照

ISO/IEC 1539-2:1994, Information technology - Programming languages - FORTRAN - Part 2: Varying length character strings.


HTML generated using htroff at 27 February 2000 22:7:27.