存储在CSV

时间:2019-04-19 18:50:15

标签: c csv fgets

我正在解决CUDA编程作业问题,并努力读取其中的大数据。我正在通过大学的计算机上通过SSH远程运行。

我正在处理CSV文件中的三列数据和2 ^ 25行。每次运行代码时,我都会在读取CSV的while循环的第900次迭代附近读取数据时遇到分段错误。

我已经对堆栈溢出进行了广泛的搜索,并尝试了几种不同的方法来读取数据。

static double inputs[2^25]; 
static double outputs[2^25]; 
static double txval[2^25]; 

FILE *input = fopen("coins.csv", "r");
int j = -99; 
char buffer[1024];
char *field; 
unsigned long k = 0; 

if(input == NULL){
    printf("Unable to open file\n"); 
    return 1; 
}

while(fgets(buffer, 1024, input) && k < 2^25){

    // skip the first row with column titles 
    if(j == -99){
        j = 0; 
    }

    else{
    field = strtok(buffer, ","); 
    inputs[k] = atof(field); 

    field = strtok(NULL, ","); 
    outputs[k] = atof(field); 

    field = strtok(NULL, ","); 
    txval[k] = atof(field); 

    k = k + 1; 


    }
}
fclose(input); 

预期的结果是,由于每次while循环运行时缓冲区都会被覆盖,因此将读取整个文件。

实际结果是,每次在while循环的第900次迭代中都会发生分段错误。

1 个答案:

答案 0 :(得分:2)

2^25不是“ 2等于25的幂”。这是2 XOR 25。

我建议您使用值33554432

编辑:(感谢@bruno)

33554432更容易读为1 << 25