当前位置:首页 » 编程语言 » c语言读写csv
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言读写csv

发布时间: 2023-04-07 07:32:23

① 关于c语言读CSV文件的问题

csv文件即逗号分隔值文件。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

要用C语言读取CSV,首先需要确定文件中定义的字符分隔值,以及每一行各个列的元素格式。

如果所有的元素格式相同,那么可以每行一个一维数组,所有行组成一个二维数组,逐个元素进行读取。

如果元素格式不同,可以按照元素类型,构建一个结构体,每行读到一个结构体变量中,所有行组成一个结构体数组。

下面根据两种情况,按照分隔符为逗号(,),分别举一个例子:

文件名设定为in.csv,每行10个元素。

一、所有元素均相同类型,比如int型。

#include<stdio.h>
intmain()
{
FILE*fp;
inta[100][10];//定义一个足够大的数组来存储。
intline=0;
intc,i;

fp=fopen("in.csv","r");//以文本方式打开。
if(fp==NULL)return-1;//打开文件失败。
while(1)
{
i=0;//列标记清零。
while(1)
{
fscanf(fp,"%d",&a[line][i]);//从文件禅乱中读取一个元素。
c=getchar();//读取下一个字符,可能是分隔符,换行符或文件结尾。
if(c==' '||c==EOF)break;//读完一行,或者到文件结尾,退出读取。
i++;
}
line++;
if(c==EOF)break;
}

fclose(fp);//关闭文件。
//以下循环用来打印所有读到的值。
for(i=0;i<line;i++)
{
for(c=0;c<10;c++)
printf("%d",a[i][c]);
printf(" ");
}
}

二、每行元素不同。

比如共三列,第一列是int型,第二列是字符串,第三列是float型。

如果分隔符不是空白字符,或者字符串元素中可能存在除分隔符外的其它空白字符,在读取搏袭御字符串的时候是不能用fscanf函数的。

定义结构体如下

strcutdata
{
inta;
chars[100];//根据实际要求,定义足够大的字符数组。
floatf;
};

读取代码如下:

#include<stdio.h>
intmain()
{
FILE*fp;
strcutdataa[100];//定义基岩一个足够大的结构体一维数组来存储。
intline=0;
intc,i;

fp=fopen("in.csv","r");//以文本方式打开。
if(fp==NULL)return-1;//打开文件失败。
while(1)
{
fscanf(fp,"%d",&a[line].a);//从文件中读取第一个元素。
c=getchar();//读取分隔符。
//接下来要读取字符串,需要逐个字符读入,直到出现分隔符为止。
i=0;
while(1)
{
a[line].s[i]=getchar();//读入一个字符。
if(a[line].s[i]==',')//发现分隔符
{
a[line].s[i]='';//赋值字符串结束符。
break;//退出读取字符串。
}
i++;
}
//由于在读字符串的时候分隔符已经被读取,这里不需要读分隔符,而是直接读下一个元素。
fscanf(fp,"%f",&a[line].f);//从文件中读取最后一个元素。
c=getchar();//读取下一个字符,可能是换行符或文件结尾。
line++;
if(c==EOF)break;//到文件结尾,退出读取。
}

fclose(fp);//关闭文件。
//以下循环用来打印所有读到的值。
for(i=0;i<line;i++)
{
printf("%d%s%f ",a[i].a,a[i].s,a[i].f);
}
}

② C语言读取csv大文件以及结果的存储问题

你用C还是C++,MFC有文本库的,若用C,处理汉字较困难
可以一次读完文件,再处理
不定长度的数据用数组,动态内存分配都可以,反正现在内存大小应该不是问题

③ C语言读入.csv文件后,屏幕输出是乱码,写入本地文件不全,且错行,请问C语言高手怎么回事

csv文件中数据是用逗号分隔的,你读出后没有正确处理这些逗号。

④ c语言,关于读取csv文件的数据,(一行有四列)显示在屏幕。下面的代码:列数据

printf ("%s\n", check);
修则橘改其中的%s呀,孙答团比如:你想固举毁定10个宽度,即:%10s.

⑤ c语言读csv

//随便写了一个,只能取到抛砖引玉的效果,时间有限。如果有不明白的地方再和我联系吧
#define MAXCHAR 100
int main()
{
FILE *pb;
int i,num = 0,j = 0;
char pchar[MAXCHAR];
char **ppstr;
char *pstr,*ppchar;
memset(pchar, 0, 100);
pb = fopen("D:\\pb.csv","r");
if (pb == NULL)
{
printf("error!");
return;
}
ppstr = (char **)malloc(5*sizeof(char *));//这个最多可以存5条数据
pstr = (char *)malloc(5*20);//最多5条数据,每个数据不超过20-1=19
for (i = 0; i < 5; i++)
{
ppstr[i] = pstr + i*20;
}
memset(pstr, 0 ,100);
fseek(pb, 0, SEEK_SET);
fread(pchar, 1, 100, pb);
ppchar = pchar;
i = 0;
while (*ppchar)
{
if (*ppchar == 0x2c)//csv文件中一条数据和另外一条数据之间分隔符0x2c
{
memcpy(ppstr[j], pchar+num,i - num);
j++;
num = i+1;
}
if (*ppchar == 0x0a)//CSV文件中的换行符
{
memcpy(ppstr[j], pchar+num,i - num);
j++;
num = i+1;
}
i++;
ppchar++;
}
for (i = 0; i < j; i++)
{
printf("%s\n", ppstr[i]);
}
free(pstr);
free(ppstr);
return;
}

⑥ 如何用c语言读取cvs文件到二维数组里

1、使用双层循环语句,就可以依次把数据顺序读入到一个二维数组当中了。
2、册轿例程:
代码如下:李姿液

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

char *trim(char *str)
{
char *p = str;
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
p ++;
str = p;
p = str + strlen(str) - 1;
while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
-- p;
*(p + 1) = '\0';
return str;
}
int main()
{
FILE *fp = fopen("test.csv", "r");
if(fp == NULL) {
return -1;
}

char line[1024];
while(fgets(line, sizeof(line), fp)) {
//printf("%s", line);

char *save_ptr;
char *name = strtok_r(line, ",", &save_ptr);
if (name == NULL) {
return -1;
}
char *age = strtok_r(NULL, ",", &save_ptr);
char *birthday = strtok_r(NULL, ",", &save_ptr);
printf("%s\哪物t%s\t%s\n", trim(name), trim(age), trim(birthday));
}
return 0;
}