问题描述
需要读取的CSV文件相当大,但每个文件只有一行(从kb到gb),一大行。我尝试使用下面的代码,但最大大小只能通过 1000000
达到,再添加一个 0
结果为 Segmentation fault
。我读到缓冲区有限制,但是有没有另一种方法可以读取那一行大行并将其放入一个 int 数组中?还是我真的需要使用mmap
?非常感谢!
struct IntArrLen {
int length;
int max_index;
int* arr;
};
struct IntArrLen readInt(char* str){
struct IntArrLen intArr;
intArr.length = 0;
intArr.arr = NULL;
char file_name[100];
strcat(file_name,str);
FILE *fp;
fp = fopen(file_name,"r");
if (!fp){
return intArr;
}
char* token = NULL;
// define the maximum size of line
int max_size = 1000000;
char row_content[max_size];
int* arr = (int *) malloc(sizeof(int) * max_size);
fscanf(fp,"%[^\n]",row_content);
int count = 0;
token = strtok(row_content,",");
while(token != NULL){
arr[count] = atoi(token);
token = strtok(NULL,");
count ++;
}
intArr.length = count;
intArr.arr = (int *) malloc(sizeof(int) * intArr.length);
memcpy(intArr.arr,arr,sizeof(int) * intArr.length);
free(arr);
return intArr;
}
CSV 文件是这样的:
1245,2234532,23243523,235235325,325362436,5473658658,65879659,....
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)