愛しの Fortran・3改

Fortran について気の向くままに綴ります

書式付き流れ探査入出力 (その6)

停留入出力 書式付き流れ探査入出力は、従来の(書式付き)順番探査入出力とほぼ上位互換で、 機能が拡張されているということを見てきました。 元々、流れ探査は C のストリーム入出力との互換性を意識した機能です。 ぱっと見て C と Fortran のテキスト入…

書式付き流れ探査入出力 (その5)

POS 指定子 書式付き流れ探査入出力では、一度通ったところに戻れます。 つまり INTEGER :: POS WRITE(UNIT,"(G0)") "A" INQUIRE(UNIT,POS=POS) WRITE(UNIT,"(G0)") "B" WRITE(UNIT,"(G0)") "C" WRITE(UNIT,"(G0)",POS=POS) "D" この例では A と書いた直後の…

書式付き流れ探査入出力 (その4)

改行文字による改行 書式付き流れ探査出力では、「改行文字」(newline character) を出力することにより、 現在記録へのデータ転送を終了して、続く出力が新たな記録を作成するようにできます (つまり改行されます、前回の用語で言えば、現在位置に記録マー…

書式付き流れ探査入出力 (その3)

基本的な使い方 ようやく本題です。 書式付き流れ探査出力の OPEN 文です。 OPEN(FILE=FILE,STATUS="REPLACE",ACTION="WRITE", & ACCESS="STREAM",FORM="FORMATTED",NEWUNIT=UNIT) 形としては 「FORM="FORMATTED"」を省略すると書式なし流れ探査出力 さらに…

書式付き流れ探査入出力 (その2)

用語の確認 Fortran 用語は独特なので、まずは用語を整理しておきましょう(まぁどのプログラミング言語の用語も独自のものですが、Fortran はかなり少数派なので)。 「プログラムの外部の媒体中に存在するファイル」を「外部ファイル (external file)」と…

書式付き流れ探査入出力 (その1b)

時期は熟した? 余談 「説明していきたいと思います」と前回結んでおきながら、背景の話とかが好きなのでいきなり余談になります。 Fortran 2008 までは「書式付き流れ探査として接続されている場合」「ファイル中のファイル記憶単位を読んだり書いたりするこ…

書式付き流れ探査入出力 (その1)

時期は熟した? 2021 年現在、Fortran 2003 で導入された書式付き流れ探査入出力 (formatted stream output) はあまり使われていません。 従来使われている書式付き順番探査入出力と、ほぼ上位互換で機能が拡充されているので、 使わない手はありません。 な…

INQUIRE 文で接続の性質を調べる

OPEN 文の ACTION 指定子と同様、以下の指定子の値を INQUIRE 文で調べることができます。 ACCESS FORM ASYNCHRONOUS 接続されていない装置あるいはファイルでは UNDEFINED が返されます。 ただ、そもそもこれらはプログラマが OPEN 文で指定して、 接続が続…

OPEN 文の ACTION 指定子 (後編)

前編では、ACTION 指定子の指定は省略しない、ということを書きました。 その理由が ACTION 指定子の既定値は処理系依存だから、なのですが、 ではなぜ処理系依存なのか。 少し欲張ったからなのです。 ACTION 指定子は決意表明で、表明したことで起きること…

OPEN 文の ACTION 指定子 (前編)

ファイルを新規に接続する OPEN 文では必ず ACTION 指定子を指定します。 入力用に接続(WRITE 文、PRINT 文、ENDFILE 文に指定しない)→ "READ" 出力用に接続(READ 文に指定しない)→ "WRITE" 入出力用に接続(使用制限なし)→ "READWRITE" これはプログラ…

整数型 (その1)

突然、整数型の現状について。 2021 年現在、整数型は 8 ビット、16 ビット、32 ビット、64 ビットの 4 種類の実装が普通です。処理系によっては 128 ビットの整数型があるものも。負の数は 2 の補数表現です。ただし、ビット数を n として、-2**(n-1) をト…

ブログ紹介 (歴史編)

ブログのタイトルは「愛しの Fortran・3改」。FORTRAN III についてのブログではなくて、「愛しの Fortran」の 3 です。 1996 年頃(だったはずです)に、日本語で読める Fortran 解説のリンク集、という形で初代「愛しの Fortran」サイトを作りました。数年…

実数値を文字列に変換する関数 (その5)

結果変数の長さ決めとその利用 書式仕様 (*(G0,1X)) または (*(G0)) での出力とともに使う、実数配列値を文字配列値に変換する関数の実装を説明しています。 結果変数の長さを決める際、 L = 0 DO I = 1, N WRITE(LINE,FMT) A(I) L = MAX(LEN_TRIM(LINE),L) …

型宣言付き ALLOCATE 文、UBOUND と SIZE

実数値を文字列に変換する関数 (その4) 前回、書式仕様 (*(G0,1X)) または (*(G0)) での出力とともに使う目的で、実数配列値を文字配列値に変換する関数を示しました。今回はその内容の解説です。 まず、実数型配列の入力値に対して、文字型の配列値を返すの…

実数値を文字列に変換する関数 (配列編)

前回までで、書式仕様の指定を簡略化する目的で、 実数値を文字列に変換する関数を実装しました。 かつては WRITE 文で呼び出された関数で WRITE 文を実行することは禁じられていました(再帰的 WRITE の禁止)。 Fortran 2003 で WRITE 文で呼び出された関…

実数値を文字列に変換する関数 (その2)

さて、前回の関数 F_(A,N,FMT) は実数値 A と書式仕様 FMT の他に 関数結果の長さ N を引数としていました。 どうして書式仕様を与えているのに、さらに N が必要だったのか。 Fortran 95 までは関数結果の文字変数の長さは関数の開始時に確定していることが…

実数値を文字列に変換する関数

初回なのに、これまでのあらすじから。 …Fortran 2008 で編集記述子 G0 が導入されて普段使いの書式仕様は (*(G0,1X)) か (*(G0)) で済むことに。しかし実数値の満足な出力には有効桁数の指定が必要。ならば書式仕様の方はそのままで、実数値は文字列に変換…

練習1

WRITE(*,"(G0)") "Hello, World!" 変数 I とか書けますか。