2009-06-24 20 views
1

Cプログラムを使用して.txtファイルの大きなセットのデカルト座標を行列またはそのようなデータ構造に読みたい。Cプログラムを使用してtxtファイルから座標を読み取る

ファイルは、ファイルには約4000などの座標があるタイプ

023 435 1.0 
23.5 12.5 0.2 
: :  : : : : 
: :  : : : : 

のように...

の内容を持っています。第1列は、x座標、第2列yおよび第3列z座標を示す。各行は点を表します。私は最終的に座標に基づいていくつかの計算をしたいと思っています。私はちょうどCでファイル処理の初心者のレベルのアイデアを持っています。

任意のアイデア??できるだけ早く返信してください!

+3

宿題?私たちはあなたにコードを書くことを望みますか?あなたの試行をここに入れ、正確に動作していないものを尋ねます。 –

+2

なんで!その純粋なプログラミングの問題は、これがスタックオーバーフローに関するものであり、プログラマーの知識を増やすことです。この男は何かをする方法を学びたいと思っています。 –

答えて

1

の配列にファイルを読み込む各ポイントに

typedef struct { 
    float x; 
    float y; 
    float z; 
} Point; 

を格納する構造体を使用する場合があります。

#define _GNU_SOURCE 
#include <stdio.h> 
#include <stdlib.h> 

#define MAX 5000 

typedef struct coord 
{ 
    float x; 
    float y; 
    float z; 
} coord; 

int main(int argc, char *argv[]) 
{ 
    if(argc != 2) 
     exit(1); 
    char *filename = argv[1]; 

    char *line = NULL; 
    int n = 0; 

    FILE *coordFile = fopen(filename, "r"); 

    coord *coords = malloc(sizeof(coord) * MAX); 
    if(coords == NULL) 
     exit(3); 
    int i = 0; 

    while(getline(&line, &n, coordFile) != -1 && i < MAX) 
    { 
     int items = sscanf(line, "%f %f %f", &coords[i].x, &coords[i].y, &coords[i].z); 
     if(items != 3) 
      exit(2); 
     i++; 
    } 
    fclose(coordFile); 
} 
0

私はfscanfと言っていますか?

5

まず(例が指定されている)あなたは次にポイントsscanf関数とGNUのgetlineを使用して

Point *points = malloc(4000 * sizeof *points); 
    FILE * fp; 
    fp = fopen ("myfile.txt", "r"); 
    int index = 0; 
    while(fscanf(fp, "%f %f %f", &points[index].x, &points[index].y, &points[index].z) == 3) 
     index++; 
    close(fp); 
+3

スタック上の12000浮動小数点宣言は非常に賢明ではありません。 –

+0

ヒープメモリを使用するように変更:P –

関連する問題