- ベストアンサー
FORTRANでのファイルの上書き
FORTRANで,何ステップかの解析データを順次テキストファイルに出力しているのですが,書き込んだファイルの一部だけを書き変えることはFORTRANでは無理なのでしょうか? 例えば, #ファイル名 解析ステップ数 STEP1 : 膨大な解析データ : STEP??? : END OF FILE なるファイルを作りたいときに,ステップ数は解析が終わらなければ分からないので,解析の最後に"解析ステップ数"の行に???の値を書き込みたいのですが,rewindして先頭に戻って頭の部分を書き直すとファイルごと上書きされてそれ以下の部分は全部消えてしまします。なので現状は解析終了後に生成されたファイルのステップ数の部分をいちいち書き換えてビューワーに投げています。膨大な解析データをメモリに保存して最後にまとめてテキストデータに出力することは避けたいのですが,何か良い方法はないでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
順編成ファイルでは不可能です。 レコード長が固定できる(最大レコード長がそれほど大きくない)なら、直接編成ファイルに書けば良いだけだと思いますが、処理系がサポートしていないのでしょうか。 で、第一レコードには最終レコード番号を書いておく。 これで、実際にはN番のレコードにはN-1の内容が書かれることになります。それが嫌なら、レコード番号を管理するだけの一レコードだけのファイルを別に作ればいいでしょう。 http://wwwoa.ees.hokudai.ac.jp/people/numa/enshu/fileio.html
その他の回答 (1)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
一般論になってしまいますが、順次テキストファイルを使う限り簡単に部分書き換えは出来ません。 2種類の方法を考えて見ました。 (1) テキストファイルを読みながら別のファイルに書き出す方法。 ・このとき目的の行のみ書きかえる。 ・最後に元のファイルを削除し、新しいファイルを元の名前にする。 (2) 解析データを直接書きこまない方法。 ・解析データは作業ファイルに書き出す。 ・ステップ数が確定した段階で、作業ファイルの内容をテキストファイルに書き写す。 ・作業ファイルを削除する。
お礼
やはりそうするしかないのですね。 部分上書きができないということがわかっただけでも,収穫でした。 ありがとうございます。
お礼
>順編成ファイルでは不可能です。 やはりそうでしたか。何とかしてどうにかならないかといろいろ試していたのでこれは収穫でした。 ダイレクトアクセスでの書き出しはしたことがないのですが,これだとできる可能性はあるみたいですね。レコード長とかの知識が希薄なので,ちょっと勉強してみようと思います。ありがとうございました。