2017-11-08 14 views
0

私は定義されたフォーマットと私のテキストファイルから列全体を総括したいです。私はテキストファイルを読み込んで印刷することができますが、要約には問題があります。ここに私のコードです:FORTRANのテキストファイルから列を集計する方法は?

program sum 
implicit none 
character, Dimension(259)::a,b 
real,Dimension(259)::c 
integer, Dimension(25)::d 
integer::e, xyz 

!read the existing file 
open(unit=2,file="vishal.rtp_entry",status="old",action="read") 

read(2,*) 
read(2,*) 
11 format(F6.3) 
do e=1, 259 
    read(2,*)a(e),b(e),c(e),d(e) 

    xyz = sum(\c(e)\) 
    write(*,11)xyz(e) 
    end do 

close(2) 

end program sum 

私のコードを修正する必要がありますか?ありがとう

+0

は( '合計を試してみてください私はすでにそれを試してみましたとしてC) 'ループ – agentp

+0

後にそれは動作しませんでした。 – Vishal

答えて

2

まず最初に、ループの各繰り返し(すなわちすべての入力行)に対してsumwrite(*,11)の両方を実行していることがわかります。あなたが望むものをほぼ確実ではありません

あなたはすでに、すべての値を格納しているので、あなたにもループ後の合計構築することがあります。次のポイントに私をもたらし

do e = 1, 259 
    read(2, *) a(e),b(e),c(e),d(e) 
end do 
xyz = sum(c) 
write(*, 11) xyz 

xyzは整数スカラーとして宣言されますが、中あなたは配列のように呼び出すwriteステートメントです。それは失敗するはずです。

次に、xyzは整数ですが、cの配列はrealの配列です - 私はあなたが1に固執すべきだと思います。異なるコンパイラは、他のもののためにユニット2を使用する場合がありますよう

その後、あなたは、危険であるunit=2を、使用しています。私は通常10を超える数字に固執する、または、より良い、コンパイラは私のために良いユニットを選択していることを意味しているnewunit=<variable>を使用しています。

しかし、あなたが望むすべて1人の合計は、あなたが(入力ファイルが持つことができる行数にとして、より柔軟な)たくさんのものよりも簡単に行うことができますということであれば:

program my_sum 
    implicit none 
    character :: a, b 
    real :: c 
    integer :: d, e 
    real :: accumulator 
    integer :: ios ! Status for read commands to test for EOF 

    open(unit=11, file="vishal.rtp_entry", status="old", action="read") 

    accumulator = 0.0 

    do 
     read(11, *, iostat=ios) a, b, c, d, e 
     if (ios /= 0) exit 
     accumulator = accumulator + c 
    end do 

    close(11) 

    write(*, '(F6.3)') accumulator 

end program my_sum 
+0

ありがとう、@ chw21。コードを少し修正した後、私にとってはうまく機能しました。 – Vishal

+1

@Vishal答えはあなたの質問に答えた場合othesは、質問が回答されていることを知って、それが原因だところ答えのポスターは信用を得るように、あなたは、それを受け入れる必要があります。 –

関連する問題