我想从.txt文件的读大量点的集合的笛卡尔坐标转换成一个矩阵,或者使用一个C程序一些这样的数据结构。
该文件具有类型的内容
023 435 1.0
23.5 12.5 0.2
: : : : : :
: : : : : :
等等...
有文件中的约4000这样的坐标。 第一列表示的x坐标,第二列y和第三列Z坐标。 每一行代表一个点。 我最终想要做的基础上,统筹一些计算。 我只是有文件的C.处理初学者的水平主意
有任何想法吗?? 请尽快回复!
使用的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);
}
首先,你可能想使用一个结构来存储每个点
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);