① 用c语言写CSV文件,如何写出多个工作表

CSV 文件 不支持 EXCEL中 的多个工作表的模式。 一个 CVS 文件只能转换成 EXCEL 一个工作表。

另外,如果你想把一个 EXCEL 文件保存为 CSV 文件,也会提示你是否只保存当前活动的工作表,或者为每个工作表分别保存一个 CSV 文件。

② C语言怎么读取CSV里面的数据

cvs文件用记事本打开你会发现,其实它是用tab制表符来分单元格的,可以考虑按照'\t'来分词。

③ C语言输出csv文件格式如何换列

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

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

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

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

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

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

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

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

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

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

#include <stdio.h>
int main()
{
FILE*fp;
int a[100][10];//定义一个足够大的数组来存储。
int line = 0;
int c, 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 == '\n'||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("\n");
}
}

二、每行元素不同。

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

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

定义结构体如下

strcut data
{
int a;
char s[100]; //根据实际要求,定义足够大的字符数组。
float f;
};

读取代码如下:

#include <stdio.h>
int main()
{
FILE*fp;
strcut data a[100];//定义一个足够大的结构体一维数组来存储。
int line = 0;
int c,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]='\0'; //赋值字符串结束符。
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\n", a[i].a, a[i].s, a[i].f);
}
}

④ C语言读取CSV文件到二维数组

这个程序的关键部分是读每一行中,

由逗号分隔的各个字段,也即token.
对每一行,把每个字段逐一取出,然后想用就用,不用丢弃.----这个思路,应该是既单纯,又比较优雅吧.
为此,为你单独写了这一思路的实现及相关测试,
代码如下:
---------------------------------------opstring.c
int get_next_token_CLangVersion
( const char* from , //0218,13
char* token, char token_seper )
{
static char* from_old = 0 ;
static int fromidx = 0;
char c ;
//init for new begin
if (from != from_old )
{ from_old = from ;
fromidx = 0 ;
}

//init for next new token
*token = 0 ;

//check --can be getting ?
if (fromidx == -1) return -1;

//get token
//get a char from "from", then get again
while ( (c=*(from+fromidx++))
!= 0 && c != token_seper )
*(token++) = c ;

//get done
if ( c== 0) fromidx = -1 ;
if ( c== token_seper)
{/*do nothing .
fromidx恰好已指向下一个token之起始位置*/
}
*token = 0; //token结束
return 0 ;
}

-------------------------------------------------test.c

#include <stdio.h>
#include "opstring.h"
void main ()
{
char token[100] ;
char s[1024] ;
int ret = 0;

scanf ( "%s", s) ;
*token = '#';
for ( ; ret != -1;)
{ printf ("token--%s--\n", token) ;
ret = get_next_token_CLangVersion (s, token, ',') ;
}
}
/*
23,,,3444444443lld,,4444444444444444,266,d,,fddd3-,
token--#--
token--23--
token----
token----
token--3444444443lld--
token----
token--4444444444444444--
token--266--
token--d--
token----
token--fddd3---
token----
*/

-------------------------------------------opstring.h
int get_next_token_CLangVersion ( const char* from ,char* token, char token_seper ) ;

该实现在Borland C++ 5.6.4 for Win32 环境下,测试通过.

该实现是可复用的哟.祝你好运.
关键部分解决了,其它部分对你而言,应该是小菜一碟吧呵,我想.^_^

⑤ 做一个处理.csv文件的小程序需要什么编程语言

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
要用C语言读取CSV,首先需要确定文件中定义的字符分隔值,以及每一行各个列的元素格式。
如果所有的元素格式相同,那么可以每行一个一维数组,所有行组成一个二维数组,逐个元素进行读取。
如果元素格式不同,可以按照元素类型,构建一个结构体,每行读到一个结构体变量中,所有行组成一个结构体数组。
下面根据两种情况,按照分隔符为逗号(,),分别举一个例子:
文件名设定为in.csv,每行10个元素。
一、所有元素均相同类型,比如int型。
#include <stdio.h>
int main()
{
FILE*fp;
int a[100][10];//定义一个足够大的数组来存储。
int line = 0;
int c, 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 == '\n'||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("\n");
}
}
二、每行元素不同。
比如共三列,第一列是int型,第二列是字符串,第三列是float型。
如果分隔符不是空白字符,或者字符串元素中可能存在除分隔符外的其它空白字符,在读取字符串的时候是不能用fscanf函数的。
定义结构体如下
strcut data
{
int a;
char s[100]; //根据实际要求,定义足够大的字符数组。
float f;
};
读取代码如下:
#include <stdio.h>
int main()
{
FILE*fp;
strcut data a[100];//定义一个足够大的结构体一维数组来存储。
int line = 0;
int c,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]='\0'; //赋值字符串结束符。
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\n", a[i].a, a[i].s, a[i].f);
}
}

⑥ 用c语言来打开csv格式内容怎么做

csv是逗号分隔的, 其它的 都等同于纯文本
所以 简单的csv文件, 只需要按照文本方式打开
然后以逗号为分隔符 读取每个域的内容就可以了。
可以根据内容约定, 存储成数组或者结构体

⑦ 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语言读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语言中,把数据存储成txt或csv格式怎么才能正常显示

1,
不知道你的代码错在哪,下面是我写的运行正确的,自己对照看看

2,
保存到csv格式,他不认制表符\t,

3,
保存到xls格式就比较好

4,
运行后到D盘根目录下去找文件tmp.txt和你好.xls

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

void main()
{
int i;
char Name[5][8] = {"AAA","BBB","CCC","DDD","EEE"};
char Sex[5][8] = {"男","女","女","男","女"};
char Age[5][8] = {"27","23","28","27","26"};

FILE *fp;
fp=fopen("d:\\你好.xls","w");

fprintf(fp,"\n\t姓名\t性别\t年龄\n");
for(i=0;i<5;i++)
fprintf(fp,"\t%s\t%s\t%s\n",Name[i],Sex[i],Age[i]);

fclose(fp);

if((fp=fopen("d:\\tmp.txt","wt+"))==NULL)
{
printf("cannot open the file\n");
exit(0);
}

for (i=0;i<1000;i++)
{
fprintf(fp,"hello");
putc('\n',fp);
fprintf(fp,"周一 周二 周三 周六\n");
}

fclose(fp);
}