Fortran Coder

标题: Fortran文件续写 [打印本页]

作者: sufx2007    时间: 2015-4-4 12:18
标题: Fortran文件续写
Fortran文件读写是否有如下功能:
1、对于已存在的文件a.dat,我希望打开后在文件初始加入一些内容,且保留已经存在的。
     例如,a.dat已有内容为2 3 4 5(每个数字一行),现在我想在原有的基础上在第一行加入1,使数据变为1 2 3 4 5.
     我使用
     open(1,file=‘a.dat’,access=append)
     rewind 1
     write(1,*)"1"
     结果前有数据还是被擦拭掉了,a.dat中只有1

2、打开文件后倒叙读取文件
     例如,a.dat文件内容1 2 3 4 5 6 7 8 9,我想从最后一行读取,一次为9 8 7 6 5 4 3 2 1.
谢谢!

作者: 楚香饭    时间: 2015-4-4 12:27
1.先把原有的内容读出来,然后write 1,再write原有内容。
其他编辑器,比如记事本,UltraEdit 也是这样做的。

2.顺序读取,倒序使用就行了。
Do i = 1 , 9
  read( 文件号 , * ) a( 9 - i + 1 )
End Do
作者: sufx2007    时间: 2015-4-4 12:32
楚香饭 发表于 2015-4-4 12:27
1.先把原有的内容读出来,然后write 1,再write原有内容。
其他编辑器,比如记事本,UltraEdit 也是这样做 ...

谢谢
对于第一个问题:为了加入很少的语句而重复写入一次,程序不够优化,是否有其他的办法呢?
我原本想加入的这几行重新写入另外一个文件,但是想着写入一个文件会好些。
作者: 楚香饭    时间: 2015-4-4 12:35
没有别的办法,所有的文本编辑器都是这样做的。

连 UltraEdit 这样的商业软件都是这样,打开一个大的文本文件,非常慢,即便你做了很小的改动,保存一下也非常慢。

如果有好的办法,UltraEdit 早就用了。这已经不是 Fortran 的问题了,除非操作系统的文件管理方式有大的突破。
作者: 楚香饭    时间: 2015-4-4 12:37
不过你可以从你的技术实现上做出修改,

比如用二进制文件。预先在文件的前面留出足够的空白。

或者如果非要用文本文件,每一行都一样长,可以考虑用直接读取的有格式文件。
作者: 百事可乐    时间: 2015-4-6 18:11
二进制文件操作起来会比文本文件更容易维护。所以建议楼主考虑换一种文件格式。
作者: pasuka    时间: 2015-4-7 09:01
百事可乐 发表于 2015-4-6 18:11
二进制文件操作起来会比文本文件更容易维护。所以建议楼主考虑换一种文件格式。 ...

恩,建议直接上HDF格式,如果文件足够大的话




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2