gpt4 book ai didi

c - 将 CSV 文件读取到 C 中的二维双数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:43 26 4
gpt4 key购买 nike

我需要写一个程序,用C语言解析一个大的CSV文件(大约2000*2000),并以double[][]数组的形式存储。我写了一个程序,它似乎适用于小文件(我检查了一个 4*4 的 csv 文件),但是对于大文件它给了我不正确的结果。(因为行数和列数是错误的并且程序在之后崩溃了那个)。

这是代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main (void)
{
int rowMaxIndex,columnMaxIndex;
double **mat;
double *matc;
int i,j,idx,len;
char part[5000];
char *token;
char *temp;
char *delim = ",";
double var;
{
FILE *fp;
fp = fopen("X1_CR2_new1.csv","r");

if(fp == NULL)
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}

// count loop
rowMaxIndex = 0;
columnMaxIndex = 0;
while(fgets(part,5000,fp) != NULL){
token = NULL;
token=strtok(part,delim);
while(token != NULL){
if(rowMaxIndex==0)
{
columnMaxIndex++;}
token=strtok(NULL,delim);
}
rowMaxIndex++;
}
fclose(fp);

printf("Number of rows is %d, and Number of columns is %d", rowMaxIndex, columnMaxIndex);
// allocate the matrix

mat = malloc(rowMaxIndex * sizeof(double*));

for (i = 0; i < rowMaxIndex; i++)
{
mat[i] = malloc(columnMaxIndex * sizeof(double));
}
fclose(fp);
}
// rewind the file to the beginning. The rewind(fp) wasnt working so closed and reopened file.

{
FILE *fp;
fp = fopen("X1_CR2_new1.csv","r");

if(fp == NULL)
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}

// read loop
i = j = 0;
while(fgets(part,5000,fp)!=NULL)
{
token=strtok(part,delim);
j=0;
while (token != NULL){
mat[i][j]=atof(token);
//printf("\n %f", mat[i][j]);
token=strtok(NULL,delim);
j++;
}
i++;
}
printf("\n The value of mat 1, 2 is %f", mat[1][0]); //print some element to check
free(mat);
fclose(fp);
}

return 0;
}

最佳答案

您说您的数据有 2000 列,但您的 fgets() 最多读取 4999 个字符。您的数据是否有可能超过 4999 个字符?您可能应该检查读入的每一行是否以换行符结尾(可能文件中的最后一行除外)。

顺便说一句,您不需要重新打开文件——只需rewind() 即可。

关于c - 将 CSV 文件读取到 C 中的二维双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com