- ベストアンサー
FORTRANの文字処理について。
教えてください。 例えば, 1111 2222 3333 4444 と4文字4行の書き込みをした後に, 1111aaaa 2222bbbb 3333cccc 4444dddd のように,各行の文末に追記する方法を教えてください。 1行目に戻る方法,文末へ移動する方法がわかかりません。 既に書き込まれた内容を読み直す方法だと出来そうですが, この操作を100回程度したいので,読み直しはしたくないです。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
簡単にはできませんね。 FORTRANにはファイルポインタという概念がありません(アセンブラを噛ませば何とかなります)。 また、たとえ、この例の一行目の先頭なり行末にポイントすることが出来た場合でも、通常のファイルであれば、1111の直後に改行(OSによって違う)があり、そのすぐ後には2222が続いています。 ですから、これをやるためには、まず、2222以降を必要分だけずらす作業が必要になります。各行ごとにこれをやるのはかなりの手間です。2222以降をどこかに退避しなければ難しいでしょう。 とすると、最初から十分な長さの直接編成ファイルを中間ファイルとして作業し、一気に書き出すのが一番簡単でしょうね(メモリ上でも良いけど、筋は良くない)。 ラインプリンタやシリアルブリンタ、あるいは仮想画面でやるなら、うまくプリンタ制御コマンドやエスケープシーケンスを使えば出来そうですが、これは、完全にシステム依存なのでご自分でお調べください(コマンドがわかれば至って簡単ですけど)。 まあ、もっとも、現在のコンピュータスペックでたかだか百回の読み直しをためらうような局面はないはずですね。昔は、こういうのを磁気テープを作業ファイルにしてやったものです。リアルチューリングマシンですね。
その他の回答 (1)
- koma1000nin
- ベストアンサー率30% (342/1133)
No.1のように、最初から十分な長さの直接編成ファイルを作業用ファイルとして定義するしかありませんね。 基本的には、このデータが磁気テープに記録されているものと考えて、最初のデータ(更新前ファイル)を読み取って末尾に追記し、更新ファイルとして別ファイルに書き出して行くのが定石です。そして、更新ファイルが次回操作時の更新前ファイルになります。考え方は磁気テープ媒体になっていますが、実際に磁気テープを使うわけではなく、磁気テープを磁気ディスクにおきかえてプログラムすればいいでしょう。 COBOLでさえこのように処理しますから、同様な処理に不向きなFORTRANではなおさらCOBOLのやり方に従わざるを得ないでしょう。 または、1行を1ファイルとして、それぞれのファイル名をf1,f2,f3…とする方法もあります。定義できるファイル数以内におさまればの話ですが、これは非現実的ですね。 なお第一行目に戻る命令はREWINDがあるので、「1行目に戻る方法」という質問個所は「1桁目に戻る方法」ではないかな?
お礼
有難うございました。 REWINDは読み込み時に使用するみたいですね。 書き込み時に先頭行に戻って追記できればいいのですが, やはり難しいようです。
お礼
有難うございました。やっぱり難しいんですね。 テンポラリーファイルをかまして対処したいと思います。