繁体   English   中英

将csv文件读入c中的二维数组

[英]read csv file into 2-d array in c

我一点都不熟悉C。 我只需要将数据输入到已经使用C语言开发的模型中,然后将数据放入数组中,获取输出,然后再将其输出回Python中即可。 我的数据在CSV文件中,我只是想将其放入2D数组中以运行某些功能。 当我运行以下代码以确保创建数组时,我在输出中得到一个与原始数据完全不匹配的随机单个值。 有时会打印0.00000。 我正在尝试查看整个数组,以确保可以输入它。

另外,这只是一个示例; 我的真实数据集将有> 3000行。 我知道我在运行真实数据时需要为此使用malloc()对吗?

@ user3629249感谢您和@Cool Guy的所有评论。 这就是我现在所拥有的。 我认为sprintf()仍无法将我的数组值转换回浮点数。 我搜索了所有内容,但仍然无法确定我做错了什么,但是错误告诉我data [l] [k]和todata仍然不兼容,您能告诉我我是否在正确的轨道上以及我在做什么sprintf()函数做错了吗?

#include <stdio.h>

int main() {

FILE *fp;
fp=fopen("airvariablesSend.csv", "r");
if(fp == NULL){
    printf("cannot open file\n\n");
    return -1;
}

//为简单起见,删除了标题。 仍在airvariables.csv中找到,以查看哪个//列表示什么

float data[9][6]; //for putting into array
int k , l;
float num; //for using getline() function
char *memory;
int nbytes = 500; 

//使用malloc的空间? 这足够还是太多?

char *token; //for parsing through line using strtok()
char *search = ","; //delimiter for csv 
char *todata; //for

//在堆上寻求空间

memory = (char *) malloc (nbytes + 1);

//不要;不需要使用realloc(),因为getline()会自动执行吗? // http://crasseux.com/books/ctutorial/getline.html

for(k = 0; k < 6 ; k++) //repeats for max number of columns
{
    for (l=0; l< 9; l++) //modify for number of rows that you have
    {     
        num = getline (&memory, &nbytes, fp); //reading line by line
        token = strtok(num, search); //separating lines by comma in csv

//显然strtok()仅会使用空格,我也在这里收到警告。 还有用逗号分隔的功能吗?

        sprintf(todata, "%f", token);
        data[l][k] = todata;
        printf("%f\n", data[l][k]); 
        }

        }
fclose(fp);
free(memory);



return 0;

    }

更改

for (l=1; l< 11; l++)

for (l=0; l< 10; l++)

printf("%f\n", data[10][7]);

printf("%f\n", data[l][k]);

然后移动printf

data[l][k] = num;

前者之所以完成,是因为数组索引从0开始,在长度为1处结束。
之所以这样做,是因为您需要遍历数组以获取存储在数组的每个索引中的每个值并进行打印。 您不能只使用data[10][7]并期望打印整个数组。 data[10][7]是无效的位置,访问它会调用未定义的行为,这意味着任何事情都可能发生,包括分段错误,运行时错误,崩溃等。

另外,添加return -1; 如果fopen无法打开其第一个参数,则在第一个主体的末尾if要结束程序的执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM