2017-03-09 137 views
1

我有一個輸入數據文件存儲兩列(第一列包含變量的名稱和第二列包含它們的值)。我試圖通過我的FORTRAN腳本讀取這個輸入文件,並在屏幕上打印我剛剛創建的變量。分配矩陣和輸入文件

下面是輸入文件,腳本,以及在執行所述終端上顯示所述終端輸出:

輸入文件:

a 7 2 4 
b 150 
vec1 1 2 3 
vec2 4 5 6 
c 56 

腳本

program main 
implicit none 
character(16) :: cinput 
integer :: a0,a1,a2,b0,c0,i,j 
integer,dimension(:,:),allocatable :: gfd 
open(9, file='inputdata.dat') 
read(9,*) cinput,a0,a1,a2 
read(9,*) cinput,b0 
allocate(gfd(3,2)) 
read(9,*) cinput,gfd(:,1) 
read(9,*) cinput,gfd(:,2) 
read(9,*) cinput,c0 
close(9) 
write(*,*) 'a0=', a0,'a1=', a1,'a2=', a2,'b0=', b0,'c0=', c0 
do j=1,2 
    do i=1,3 
     write(*,*) gfd(i,j) 
    enddo 
enddo 
end program main 

終端輸出

a0 = 7, a1 = 2, a2 = 4, b0 = 150, c0 = 56 
1 
2 
3 
4 
5 
6 

現在,這是很好的,但會有指定的值給變量「GFD」,而無需指定「分配」的數組的大小的方法嗎?然後,我可以使用更長/更小的數組修改輸入文件,而不必在分配變量「gfd」時修改腳本。

謝謝你的支持,如果你能幫助我! ms518

編輯:謝謝您的回答,這個過程是工作,現在可以無需修改FORTRAN腳本輸入文件的各種數組大小的工作。以下是輸入文件,腳本和獲得結果的修改。

輸入文件:

size 5 2 
a 7 2 4 
b 150 
vec1 1 2 3 4 5 
vec2 6 7 8 9 10 
c 56 

腳本

program main 
implicit none 
character(16) :: cinput 
integer :: a0,a1,a2,b0,c0,i,j, rows, cols 
integer,dimension(:,:),allocatable :: gfd 
open(9, file='inputdata.dat') 
read(9,*) cinput,rows,cols 
read(9,*) cinput,a0,a1,a2 
read(9,*) cinput,b0 
allocate(gfd(rows,cols)) 
read(9,*) cinput,gfd(:,1) 
read(9,*) cinput,gfd(:,2) 
read(9,*) cinput,c0 
close(9) 
write(*,*) 'a0=', a0,'a1=', a1,'a2=', a2,'b0=', b0,'c0=', c0 
do j=1,cols 
    do i=1,rows 
     write(*,*) gfd(i,j) 
    enddo 
enddo 
end program main 

輸出在終端

a0 = 7, a1 = 2, a2 = 4, b0 = 150, c0 = 56 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
+0

你的新問題很好。一個井意味着警告。我建議編輯第一個問題,而不是刪除它並提出一個新問題,因爲如果您有太多被刪除的問題或答案,系統可能會自動禁止您。但你不應該接近它,只是要小心。編輯和重新開放通常會更好。 –

+0

好的弗拉基米爾,謝謝你的擡頭。我認爲刪除前一個問題並提出一個新問題會更清楚。我現在知道下一次的一切 – ms518

回答

0

在B est指定數組大小的方法是將其維度包含在輸入文件中,讀取它們,分配數組,然後讀取數組。

如果您需要幫助編程,請修改您的問題。如果你願意,你可以發佈你的修改過的代碼來回答你自己的問題。

+0

謝謝,這正是我所需要的。我將編輯我的文章,並在末尾添加我的修改後的代碼 – ms518