Re: [問題] Fortran的file存取問題
※ 引述《sunseeker.bbs@ptt.cc》之銘言:
> ※ 引述《journeyman@kkcity.com.tw (㊣金大支大壽,六六大支!)》之銘言:
> : 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/月 隨身聆聽
--
推
03/12 19:50, , 1F
03/12 19:50, 1F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章