c语言怎么读取csv文件|C语言读取CSV文件到二维数组

㈠ C语言读CSV文件问题

DEBUG的时候可以发现,第一次循环时,执行到yy+=atof(stt[7]); 时,stt[7]的值突然被改变了,第二次循环时,甚至只执行到hx+=atof(stt[6]); stt[6]也被改变了.我认为问题是由于strtok是不安全所导致的,它生成的字符串数组可能被其他线程修改.我建议你用sscanf来读取字符串中的数字,比如:#include "string.h"#include "math.h"void main() { FILE *fp; /*定义一个文件指针*/ double sx,yw,wl,hx,yy; int i; char str[81]; double score[5]; sx=yw=wl=hx=yy=0;fp=fopen("分数表.csv", "rb"); /*打开文件只读*/ for(i=0;!feof(fp);i++) { fscanf(fp,"%s\n",str);sscanf(str+17,"%lf,%lf,%lf,%lf,%lf",score,score+1,score+2,score+3,score+4); sx+=score[0]; yw+=score[1]; wl+=score[2]; hx+=score[3]; yy+=score[4]; } printf("%f,%f,%f,%f,%f\n",sx,yw,wl,hx,yy); fclose(fp);}

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

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

㈢ 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 环境下,测试通过.该实现是可复用的哟.祝你好运.关键部分解决了,其它部分对你而言,应该是小菜一碟吧呵,我想.^_^

㈣ C语言中怎么动态的连接CSV格式的文件,并进行数据处理 谁知道啊,高分求教

CSV文件可看作是用逗号抄分隔的文本文件袭(用记事本打开看就知道了)。直接按照读取TXT文本文件的方式读取就可以了,每行的数据再用Split()函数按照逗号','分开就可以得到每列的数据,然后就可以进行数据处理了。

㈤ 用c语言读取csv文件中的一列数据并求这些数据的平均值

#include <stdio.h>void main() { int i,n=0; float x[1000],val; FILE *fp; if((fp=fopen("test.csv","rt"))==NULL) { printf("cannot open file\n"); return; } while (1) { if(fscanf(fp,"%f,", &val) == EOF) break; x[n]=val; n++; } fclose(fp); val=0; for(i=0;i<n;i++) val+=x[i]; if(n>0) val=val/n; printf("%g\n",val);}

㈥ vs2010 c程序读取csv文件

csv是按逗号分隔的如果确定有且只有两列那么循环用fscanf(fp, "%f,%f", &a[i], &b[i]);即可其中fp为打开的文件指针 a b是你的目标数组i为读入的下标 判断fscanf返回值 或者读后判断feof可以确定终止条件

㈦ C语言 fgets函数读取CSV文件如何从第二行开始,第一行是表头。

第一次获取的数据不要就可以了,何必这么麻烦。

函数原型:

char *fgets(char *buf, int bufsize, FILE *stream);

参数:

*buf:字符型指针,指向用来存储所得数据的地址。

bufsize:整型数据,指明存储数据的大小。

*stream:文件结构体指针,将要读取的文件流。

返回值:

成功,则返回第一个参数buf;

在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;

如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。

例子:

#include<string.h>#include<stdio.h>intmain(void){FILE*stream;charstring[]="Thisisatest";charmsg[20];/*openafileforupdate*/stream=fopen("DUMMY.FIL","w+");/*writeastringintothefile*/fwrite(string,strlen(string),1,stream);/*seektothestartofthefile*/fseek(stream,0,SEEK_SET);/*readastringfromthefile*/fgets(msg,strlen(string)+1,stream);/*displaythestring*/printf("%s",msg);fclose(stream);return0;}


赞 (0)