c语言读取csv表格数据
工作生活中我们时常把数据存储在exel表格中,如要对数据进行处理我们就需要将数据读取出来,接下来将介绍一个简单的读取csv文件格式的c语言代码。
这是一份简单的csv文件,存储着学生成绩信息接下来我们以实例为参考,读取该csv中学生的姓名和学生成绩。
我们需要的信息是从第二行开始的,所以我们需要掠过第一行从第二行开始读取数据,这时候需要用到一个函数fseek,fseek函数是定义在stdio.h里的一个函数。fseek(FILE *stream, long offset, int fromwhere);此处fseek
传入的参数为需要读取的文件,偏移量,从何处开始。
起始点 | 对应的数字 | 代表的文件位置 |
SEEK_SET | 0 | 文件开头 |
SEEK_CUR | 1 | 文件当前位置 |
SEEK_END | 2 | 文件末尾 |
CSV是 Comma-separated values (逗号分隔值)的首字母缩写,它通常是以逗号且不仅限于逗号分隔各个
值,
我们都叫他CSV。例如上面的csv表格用notepad打开后里面实际是长这样的,数据与数据之间用,隔开。
FILE *fp = NULL;
char *line,*record;
char buffer[1024];
if ((fp = fopen("Student.csv", "at+")) != NULL)
{
fseek(fp, 170L, SEEK_SET); //定位到第二行,每个英文字符大小为1
char delims[] = ",";
char *result = NULL;
int j = 0;
while ((line = fgets(buffer, sizeof(buffer), fp))!=NULL)//当没有读取到文件末尾时循环继续
{
record = strtok(line, ",");
while (record != NULL)//读取每一行的数据
{
if (strcmp(record, "Ps:") == 0)//当读取到Ps那一行时,不再继续读取
return 0;
printf("%s ", record);//将读取到的每一个数据打印出来
if (j == 10) //只需读取前9列
break;
record = strtok(NULL, ",");
j++;
}
printf("\n");
j = 0;
}
fclose(fp);
fp = NULL;
}
程序运行成功,控制台顺利打印出来了我们所需要的数据。如果想要将数据存储在数组中只要在代码相应的位置
加
上
赋
值代码,当然不要忘记csv读取出来的数据
都是字符串格式的,我们需要对其进行格式的转换