アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラムは、ド素人ですが急用です。
以下のようなCSVファイルがあります。
ido,keido,point
134.603057155416,34.1005169871047,1.07
134.603270155368,34.1005169871253,0.9
134.603499155317,34.1005129871483,0.76
134.603713155269,34.100512987169,0.54
134.604354155125,34.1005059872324,0.19
134.604567155077,34.100505987253,0.39
134.604796155026,34.100501987276,0.44
このようなものが100000個続く。
_________________________
データ数が100000個があります。
これらから、例えば、0以上0.5未満でido,keido,pointを
抜き出して、新たなCSVファイルを形成したいのです。
上の中なら、
134.604354155125,34.1005059872324,0.19
134.604567155077,34.100505987253,0.39
134.604796155026,34.100501987276,0.44
だけが抽出されたものです。

イメージとしては、(ファイル名は適当です。)
OPEN (5,FILE='motod.csv', status='old')
OPEN (5,FILE='newd.csv')
do 10 i=1,100000
READ(5,*) ido,keido,atai
IF(atai.GE.0.00).and.IF(atai.LT.0.50)then
WRITE(5,*)ido,keido,atai
10 continue
  stop
END
になりますが、配列などが必要な気がします。

新たにお示しいただくか、継ぎ足したプログラムをお示しください。
また、今後のために参考になりそうなサイトもご紹介いただけると
幸いです。

空白がおかしいところがあろうかと思いますが、
よろしくお願いいたします。

A 回答 (1件)

書かれているプログラムに対して気が付いたことをあげておきます。



型宣言を最初にしておくべきでしょう。
宣言文無しでは、iやkは整数型とみなされます。
real*8 ido,keido,atai

装置番号に5の使用は避けた方がよいと思います。
一般に標準入力として使用されています。
標準出力として使われる6も同様の理由で避けた方がよいです。
また、入力と出力の装置番号は一緒にしない方がよいと思います。
Fortran77の固定形式を使うのであれば、10から99までの数字を使って下さい。
OPEN (10,FILE='motod.csv', status='old')
OPEN (20,FILE='newd.csv')
...
READ(10,*) ido,keido,atai
...
WRITE(20,*)ido,keido,atai

読み込むcsvファイルの1行目に
ido,keido,point
という情報があれば、これは読み込む必要はないのでdo loopに入る前に空読みします。
read(10,*)
do 10 i=1,100000

if文でandを使うのであれば、
IF(atai.GE.0.00 .and. atai.LT.0.50)then
です。

出力にコンマ区切りが必要であれば、
WRITE(20,*)ido,',',keido,',',atai
とします。フォーマット文を使っても同様のことはできます。

stopの前に全角スペースが入っています。
コンパイラにもよりますが、一般にコメント文以外で全角文字を使うとコンパイルできなくなります。

特に配列は必要ありません。

質問とは直接関係ありませんが、コメント
うまく行かない場合はエラーメッセージを読みながら試行錯誤してください。
短いプログラムでは、コンパイルエラーをしっかり読めば簡単にデバグできます。
また、プログラムを勉強するのであれば、ネットも利用するのも1つの手段だとは思いますが、例題がたくさん載っている良書を参考にするのも良いと思います。
    • good
    • 0
この回答へのお礼

返信が、大変遅くなりました。
しかし、ご提示いただいたものは、とても役立ちました。
ありがとうございました。

お礼日時:2009/02/22 13:22

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

このQ&Aを見た人はこんなQ&Aも見ています