掲示板ランキング  プラスター(インドメタシン配合)  プラスター(伸縮タイプ)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7248

ファイルの読み込みと配列への格納
投稿者---geography(2007/03/18 10:53:46)


初めて書き込みをします。よろしくお願いします。

衛星画像などのラスターデータをASCIIファイルに変換し、そのデータをC言語で読み込み、ラスターデータの計算をしようと考えています。

私が行いたい計算の例は、たとえば、

1 2 1
3 4 0
2 1 5

というデータと

2 4 9
1 0 1
4 3 1

があった場合、私が行いたい処理は、たとえば、

「これら二つのデータの同じ場所にある値を足し合わせる」

ということです。結果は

3 6 10
4 4 1
6 4 6

になります。

私が質問したいのは、このようなデータをC言語で読み込む時のことについてです。私が行おうと思っている作業手順は、

1.ASCIIファイルに入っている一つひとつの値を配列に格納する
2.それを二つのデータそれぞれについて行う。
2.2つの配列を使い、計算を行う

という単純なものです。質問は上記の1に関するものです。これを行う時、私はつねに

fscanf関数

を使っています。fscanf関数を使う場合は、各列の値を全て

fscanf(fp, "%d%lf%lf", &value1, &value2, &value3);

のように指定してあげなければなりません(あくまでも私の理解ですが)。この場合は3つの値が各行にある、ということになります。

しかし、私が扱っているデータは、

約5000行
約4000列

の行列であり、各行に4000以上の値が並んでいるため、それらをfscanf関数で"%d%lf%lf"のように列挙することは現実的ではありません。この場合、どういう方法を用いて一つひとつの値を配列に格納すればいいのか、わからないのです。

ぜひどなたか教えていただけたら嬉しいです。よろしくお願いいたします。

なおOSはWindow XP Professional(日本語版)を使っており、コンパイラはVisual Studio 6.0(英語版)を使用しています。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイルの読み込みと配列への格納 7250 επιστημη 2007/03/18 11:38:19
<子記事> Re:ファイルの読み込みと配列への格納 7302 geography 2007/04/05 15:23:02


No.7250

Re:ファイルの読み込みと配列への格納
投稿者---επιστημη(2007/03/18 11:38:19)
http://blogs.wankuma.com/episteme/


各要素が空白で区切られているなら、strtokで切り出し、atofでdoubleに変換。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char input[] = "1.23 2.34 3.45 4.56 5.67";
    double result[5];
    int i = 0;
    char* p;
    for ( p = strtok(input," "); p; p = strtok(NULL," ") ) {
      result[i++] = atof(p);
    }
    for ( i = 0; i < 5; ++i ) {
      printf("%f\n", result[i]);
    }
    return 0;
}





この投稿にコメントする

削除パスワード

No.7253

Re:ファイルの読み込みと配列への格納
投稿者---geography(2007/03/18 12:15:50)


επιστημηさん、ありがとうございます。各要素は空白で区切られていますので、この方法でやってみようと思います。

ありがとうございました。また試してみた後で報告いたします。


この投稿にコメントする

削除パスワード

No.7302

Re:ファイルの読み込みと配列への格納
投稿者---geography(2007/04/05 15:23:02)


報告が遅くなりました。いろいろと試してみた結果、

for(i=0;i<nrows;i++){
    for(j=0;j<ncols;j++){
        fscanf(fp, "%lf&", &a[i][j]);
    }
}


のようにfor文とfscanfとを組み合わせて使ってみると比較的簡単にデータを格納できることがわかりました。試してみたら偶然できた、という感じでしたが、今回のこの件でいくつかの方法でデータの読み込みをする方法を身につけることができました。本当にありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ