プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっています。
xxx.datのようなデータファイルの行数をカウントする方法についてご存知でしたら、お教えください。

具体的に今やりたいことを書きますと、
複数のデータファイルがあって、それぞれデータセットの行数が異なります。
ひとつひとつのデータファイルを読み込んで計算して、それぞれ別のファイルにアウトプットさせる、というのをひとつのfortranプログラムで実現させたいのですが、その前にそれぞれのデータセットの行数をカウントする必要があります(計算の必要上)。

プログラムの中で行数をカウントするところまで組み込めたら便利なので、いろいろ調べてみたのですが、結局わからず、現状はひとつひとつのデータファイルを見て行数を確認して...というところです。

「fortran77でこういうことできるのかな?」というレベルの質問で、急ぐ話でもありません。よろしくお願いします。

A 回答 (3件)

データを読みながらカウントすればよいのでは?


前回の回答( http://qanda.rakuten.ne.jp/qa4425688.html )を変更して
以下のようにすればカウントできます。
(エラー処理などは入っていませんので適宜入れてください)
   dimension a(1000,4)
   open(1,file="data.dat")
   i = 1
 100 continue
   read(1,*, END=200) (a(i,j),j=1,4)
   i = i + 1
   goto 100
 200 continue
   write(6,*) "データ数 = " , i
   do 300 k = 1, i
     write(6, *) (a(k,j),j=1,4)
 300 continue

この回答への補足

前回にひきつづきありがとうございます!
読み込むときにカウントすればよいのですね。
教えていただいた方法でうまくいきました。

これは質問の補足というより参考程度に聞きたいのですが、
上記の方法で前回の質問のような、空行を挟むデータを読み込むときには、
空行を除いた数がカウントされるようなのですが、
空行を含めた行数をカウントする場合はどのように指定すればよいのでしょうか?

補足日時:2008/10/28 14:51
    • good
    • 0

空行を挟むデータを読み込むときにはフォーマット付文字列で読み込みます。


但し、古いFortranの知識ですので、もっと良い方法があるかもしれません。

   character*80 c
   dimension a(8,4)
   open(1,file="data.dat")
   i = 1
 100 continue
   read(1,'(A80)', END=200) c
   if(len_trim(c) .gt. 0) then
    read(c, *) (a(i,j),j=1,4)
   end if
   i = i + 1
   goto 100
 200 continue1234
    • good
    • 0
この回答へのお礼

たびたびありがとうございます!
こちらも教えていただいた方法でうまくいきました。

お礼日時:2008/10/31 22:49

>それぞれのデータセットの行数をカウントする必要があります(計算の必要上)。



事前に行数を知っていく必要があるって、何を計算するのでしょうか?

この回答への補足

言葉が足りず申し訳ありません。

直近ではまだ計算までは行わないのですが、
(なので、回答を急がない質問なのですが)
いずれデータ点の補間や平均値を計算できるようプログラムを改良していく予定です。
補間で使うかは不明なのですが、平均の計算には不可欠なので、
データ行数の取得までプログラムの中で行いたい、という意味です。

補足日時:2008/10/28 14:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!