Re: [問題] 矩陣讀資料問題
※ 引述《don1022 (向前衝)》之銘言:
: 請教板上各位,關於讀矩陣寫法碰到困難
: 目前有兩個檔案 分別以 A B 來替代
: 檔案 A 格式如下 檔案 B 格式如下
: 120.00 22.50 120.00 22.50 15.0
: 120.00 22.52 120.00 22.51 14.5
: 120.00 22.53 120.00 22.52 14.7
: 120.00 22.54 120.00 22.53 16.1
: 120.00 22.57 120.00 22.54 16.5
: . .
: . .
: . 120.00 22.57 18.5
: 120.00 23.55 .
: . .
: . .
: 121.50 22.10 120.00 23.55 18.1
: 意思為檔案 A 內容(如120.00 22.50) 檔案 B內容都有
: 我想要將檔案 B 內數值(如 15.0 , 14.7 , 16.1 , 16.5等值) 寫入至檔案 A
: 有相同內容(如120.00 22.50 ) 後面為 15.0
: 我的想法分別將檔案A 檔案B 分別以矩陣方式讀入
: 當我檔案 A讀到120.00 22.50時 去搜索檔案B有相同內容的值寫入
: 我是用 IF 作判斷, 但是在執行時出現有矩陣大小問題
: 因為矩陣B維度較大 矩陣A維度較小
: 請教板上各位 我該如何撰寫程式將矩陣B數值寫入矩陣A內
: 麻煩板上各位給我指點一些方向, 謝謝大家幫忙
Hi,我是Fortran新手,提供一些我的想法給你參考
我覺得你的A,B的資料都可以用2維矩陣表示,應該不需要設不同維度。
假設你有兩個純文字文件
A.txt是
120 22.5
120 22.52
120 22.53
120 22.54
120 22.57
B.txt是
120 22.5 15
120 22.51 14.5
120 22.52 14.7
120 22.53 16.1
120 22.54 16.5
120 22.57 18.5
Program replace
implicit none
integer,parameter::n=10 !n要大於等於A,B的列數
real(kind=8)::A(3,n),B(3,n)
real(kind=8)::Tol
integer::i,j,K,L
integer::status=0
open(10,file='A.txt')
open(20,file='B.txt')
Tol = 1D-6 !容許誤差
A =0
B =0
i =1
do while(.true.)
read(10,*,iostat = status ) A(1:2,i) !讀取A的資料
if(status /= 0) exit
i=i+1
end do
K =i-1
i =1
do while(.true.)
read(20,*,iostat= status ) B(1:3,i) !讀取B的資料
if(status /= 0) exit
i=i+1
end do
L =i-1
do i =1,K
write (*,*) A(1:3,i) !A尚未填入資料前的狀態
end do
do i=1,K !若A與B前兩欄相同則將B第三欄資料填入A
do j=1,L
if( abs(A(1,i) - B(1,j))< Tol .and. abs(A(2,i) - B(2,j))< Tol) then
A(3,i) = B(3,j)
end if
end do
end do
write(*,*) "============================"
do i =1,K
write (*,*) A(1:3,i) !A填入資料後的狀態
end do
end program
測試過可以將B的資料正確填入A
不知道這是不是你要的?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.58.38
※ 編輯: zmark 來自: 140.114.58.38 (10/28 11:50)
※ 編輯: zmark 來自: 140.114.58.38 (10/28 15:35)
※ 編輯: zmark 來自: 140.114.58.38 (10/28 15:44)
→
10/30 00:35, , 1F
10/30 00:35, 1F
謝謝指正! 我改好了^^
※ 編輯: zmark 來自: 61.230.193.132 (10/30 11:57)
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章