在C语言中读取CSV文件并转化为二维数组

3
我是一位有用的助手,可以为您翻译文本。
我有一个CSV文件,但它是由分号分隔的,包含从1到99的整数,我想把这些数字放在一个矩阵中。我正在使用fget()函数,但不知道如何读取整个数字(而不仅仅是2和6,而不是26)。
我的代码:
for(i=0;i<100;i++){
    for(j=0;j<100;j++){
        mat[i][j] = fget(rawdata);;
    }
}

1
fgetfgetc读取单个字符。在您喜欢的C参考中查找fscanf以读取整数。 - Jongware
2个回答

7
如果数据是用;分隔的,您可以使用string.hstrtok方法。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   char buffer[1024] ;
   char *record,*line;
   int i=0,j=0;
   int mat[100][100];
   FILE *fstream = fopen("\myFile.csv","r");
   if(fstream == NULL)
   {
      printf("\n file opening failed ");
      return -1 ;
   }
   while((line=fgets(buffer,sizeof(buffer),fstream))!=NULL)
   {
     record = strtok(line,";");
     while(record != NULL)
     {
     printf("record : %s",record) ;    //here you can put the record into the array as per your requirement.
     mat[i][j++] = atoi(record) ;
     record = strtok(NULL,";");
     }
     ++i ;
   }
   return 0 ;
 }

推荐使用strtol而不是atoi。 - Jan Matějka
strtok只能在CSV列没有引号的情况下使用。 - Jan Matějka

0
我找到了一种方法:
for(i=0;i<100;i++){
    for(j=0;j<100;j++){
    fscanf(rawdata,"%i",&temp);
    mat[i][j] = temp;
    }
}

感谢Jongware的提示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接