Re: [問題] Fortran的file存取問題

看板Programming作者時間17年前 (2008/03/12 02:01), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/5 (看更多)
※ 引述《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
OK了 我把後面資料記下來之後再寫回去~
03/12 19:50, 1F
文章代碼(AID): #17riZX00 (Programming)
文章代碼(AID): #17riZX00 (Programming)