Чтение координат из текстовых файлов с использованием программы C - PullRequest
1 голос
/ 24 июня 2009

Я хочу прочитать декартовы координаты большого набора точек из файла .txt в матрицу или некоторую такую ​​структуру данных, используя программу на языке C.

Файл содержит содержимое типа

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

и так далее ...

В файле около 4000 таких координат. Первый столбец указывает координату X, второй столбец Y и третий столбец Z координаты. Каждый ряд представляет точку. В конечном счете, я хочу сделать некоторые вычисления, основанные на координатах. У меня просто есть идея для начинающих уровня Обработка файлов в C.

Есть идеи? Пожалуйста, ответьте как можно скорее!

Ответы [ 3 ]

6 голосов
/ 24 июня 2009

Сначала вы можете использовать структуру для хранения каждой точки

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

Затем считайте файл в массив точек

  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);
1 голос
/ 24 июня 2009

Использование sscanf и GNU getline.

#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 голосов
/ 24 июня 2009

Я бы сказал fscanf ? (пример приведен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...