Re: [請益] 陣列讀檔的問題
※ 引述《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
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12