看板Programming
标 题Re: [问题] Fortran的file存取问题
发信站KKCITY (Tue Mar 11 23:57:44 2008)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntust!news.ntu!news.au!zoonews.
※ 引述《[email protected]》之铭言:
> ※ 引述《[email protected] (㊣金大支大寿,六六大支!)》之铭言:
> : 1)先把改变前的部份抄进去
> : 2)写入改变的部份
> : 3)再把改变之後的部份抄进去
> : FORTRAN的随机档使用好像是没有标准,你可以找找看你用的compiler有没有支援
> : 但是一般而言,上面那样还比较直接。
> :
> 恩恩 感谢
> 我是用intel fortran compiler
> 我也有在想说是否要先把档案後面的资料读入一个array
> 然後等要取代资料的部分写入後
> 再把贮存在array里的资料丢回去
> 不过我想说这种修改档案的功能感觉应该很重要呀
> Fortran的write功能怎会没有选项支援@@
> 不过搜寻半天又没查到相关功能Orz
> (还是电脑资料的贮存特性只能如此作我不了解!)
因为一般而言open开档案都是开成「循序档」
对FORTRAN最习惯的用途(计算)而言
出结果只需要出一次,下次再出又是别的档案,很自然
如果是每次要改的你就要改用「随机档」
刚才试了一下,FORTRAN其实是很轻松就支援随机档了
关键字是direct access file
所谓随机档在写入的时候指定记录编号,就可以写入档案中任意位置
每一笔记录必须要等长(当然!否则怎麽知道第几笔记录放在哪里)
有多长则是在open的时候指定,例如这样
open (unit=1, name="rec.lst", access="direct", recl=20,
C form="formatted")
而读写则是
read (unit=1, rec=i, fmt="(I9,X,I10)") m, n
write(unit=1, rec=i, fmt="(I9,X,I10)") m, 3**m
但是这用起来也并不是多麽美妙
每一笔记录要等长,第一个问题就是每笔後面不会自动换行,这你用了就知道了
因为这种档案格式就是存资料用,不是打算给人看的
第二点,如果是一大堆固定格式的资料,例如对应不同时间的数据
你找到其中某一笔,然後改写整笔,这还算简单
如果是一篇文章,要改写其中一两段,甚至是一两句
那我看你开个阵列来存,在阵列里面改好,再开个新档写回去,删掉旧档
这样还比较简单
或者就像我讲的,同时开两个档案,一读一写,
分出新旧部份,没有修改的部份直接抄,到了有改的部份再写进去
当然可以用一些比较复杂的方法
比如说,设recl=1
如果你有兴趣可以试试看,我是没有试过…
--
[法外科学暨工程顾问公司] :: DAICON III/IV 开幕动画 (1981/83) - (12/9)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
-_ http://www.wretch.cc/blog/journeyman/ _-
--
┌─────◆KKCITY◆─────┐ ◆NOKIA 3G手机上网搭配中华电信门号◆
│ bbs.kkcity.com.tw │ ★ http://www.kkbox.com.tw ★
└──《From:61.224.248.183
》──┘ 唱片公司授权百万歌曲 $99/月 随身聆听
--
1F:推 sunseeker:OK了 我把後面资料记下来之後再写回去~ 210.203.49.94 03/12 19:50