Re: [請益] 陣列讀檔的問題

看板Fortran作者 (Laa)時間15年前 (2009/12/20 11:52), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《cisboy (阿Q)》之銘言: : 我有一個(8,8)的陣列 : 我每次都只要讀(3,3)的陣列 : 例如第一次讀(1:3,1,3) : 第二次讀(2:4,1,3).....(1:3,2:4),(1:3,3:5) : 到最後讀(6:8,6:8) : 我用do loop寫他一直說我陣列範圍錯誤 : real::a(1:8,1:8) : open(1,file='d:\c.txt') : do n=1,6 : do m=1,6 : read(1,*)a(n:(n+2),m:(m+2)) : enddo : enddo : end : 後來我用動態陣列也是一堆問題 : 請問是哪邊錯了,謝謝 先不論迴圈讀到的資料順序排列正不正確 我想問題在於你提供的陣列不滿足你迴圈所需要的資料筆數 來算算看~~:p 你有一個8x8的陣列 所以資料筆數是8x8=64筆 你的迴圈裡一次需要的資料筆數是3x3=9筆 而迴圈總需要的資料筆數是3x3x6x6=324筆 所以應在迴圈第八次(n=2 m=2)的時候會出錯 為什麼會這樣呢? 因為你open裡的敘述裡只有給檔名,所以檔案應該是formatted 讀寫方向是sequential 簡單的說,你程式讀檔案時是循序從頭讀到尾,不會因為你的迴圈怎麼跑而跳著讀 所以當迴圈第七次的時候,你的迴圈已經讀了9x7=63筆資料 而迴圈第八次時,只剩一筆資料外,就讀到檔案尾巴了 建議你,先一次把檔案資料讀完 read a(8,8) open(11,file='d:\c.txt') read(11,*)a 然後用a陣列依你的需求去設計你的迴圈吧 do n=1,6 do m=1,6 ....a(n:(n+2),m:(m+2)).... enddo enddo -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.137.32.160 ※ 編輯: laa7352 來自: 140.137.32.160 (12/20 11:54)

12/21 20:42, , 1F
謝謝你的建議,我後來有發現我的問題點,謝謝
12/21 20:42, 1F
文章代碼(AID): #1BBP-KS3 (Fortran)
討論串 (同標題文章)
文章代碼(AID): #1BBP-KS3 (Fortran)