C语言读取excel文件,像这种数据怎么跳过逗号只读取数据?

如图所示,代码忘了怎么写,数据文件里面有一行数据,存为csv文件后读取怎么才能跳过逗号,只读取数据123,求大神帮忙指点

第1个回答  2022-05-23

如图所示

抱歉,我不是特别了解C语言,所以用的是C++

可追问,望采纳

追问

C++就更看不懂了,另外第13行是啥意思,为啥要这样运算,能不能把思路说一下

追答

因为你这个是数字数据,所以使用了一个tmp变量进行累加

tmp*10代表进位

a-'0'代表用a变量的ASCII码(美国信息交换标准代码)减去'0'字符的ASCII码得到a变量实际代表的数值

其他写法(适用于所有类型的数据,且代码更短):

追问

还是不懂呀,我想实现的是取数据到数组里面,数据在excel里面并不是连续的,比如在一行里有一些单元格是空的,保存为csv文件后这些空单元格都变成逗号了,如图所示;我想把这些有效数据取出来放在数组里面,不知道怎么跳过逗号。因为好几年都没接触C语言了,现在都忘得一干二净了,现在只会那些特别简单的代码了。笑死,现在连语法有没有错都看不出来,完全是靠软件提示报错来决定的。


追答

抱歉,我现在初三比较忙没能及时看到追问

这个...您是想把它存在数组中吗

这个加上注释了

望您采纳...

追问

天,现在初三的都这么厉害了吗?你也抽时间帮了我这么多,我都不好意思拒绝,但是我还是不太懂啊,要是采纳了你的答案系统就不再会推送给其他人来回答了,如果不采纳但你又帮了这么多,我也过意不去啊。另外这个可不可以直接送金币的啊,我直接送给你吧,不然你都白忙活了。然后能不能再帮忙看下我这个新的截图,为什么读CSV文件的时候前三个都是问号,从第四个才读正确的出来呢,但是读txt文件就没有这种情况。

追答

具体见注释,您看看有改善吗

追问

按你的方式改了后,数组前三个还是问号,为啥你的就没有,真没招了都,尴尬;另外如果fclose前面不加int的话,它就会关闭失败,返回eof,这个我测试过;加了int后软件又会警告,很是郁闷。

追答

引用自51CTO-网页链接

fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把  缓冲区内最后剩余的数据输出到内核缓冲区,并释放  文件指针和有关的缓冲区。

函数原型:int fclose( FILE *fp );

返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)

可在fclose(fp)后使用

if(fclose()) perror("fclose");

来判断是否成功关闭文件,关闭失败,则fclose返回“1”并输出出错原因。

----------

这个返回EOF要不就是关闭失败,要不就是流为空啊

可以试试看那个出错原因

----------

另外您这个方法只能读取一位数啊,因为是逐字符读入的,所以没法输出更多位数,会换行哈

追问

那个前面有问号的咋整啊,不会了。还有我这个方法只能读1位数,怎么才能读两位数以上的呢

第2个回答  2022-05-25

fscanf("%*[^0-9]%d",&a[0][j]);

追问

%*[^0-9]是干嘛用的,只读数字用的吗?按你的方试了下,直接一次性全部读出来了,逗号都不需要判断,而且它也不换行;我这图中注释部分要不要 都是一样的效果,我这代码肯定有问题,不知道怎么判断换行,我也不知道错在哪,麻烦帮我看下,我想和记事本中的排列一样,每行读完了自动换行继续读下一行的内容,应该怎么写呢?

追答

如何处理单元格为空的情况?

追问

嗯呐是的,单元格是空的在csv里面就是逗号(用记事本打开看的),想去掉逗号然后只放数据到数组里面,不知道咋整,还有换行问题也是,

追答

#include <stdio.h>

#include <string.h>

int main()

{

char filename[]="Demo.csv";

char a[1][5],c;

int i=0,j,p;

FILE* fp=fopen(filename,"r");

while(!feof(fp))

{

if(fscanf(fp,"%d",&p)==1)

printf("%d",p);

if(fscanf(fp,"%1[,]",&c)==1)

    printf("\t");

else if(fscanf(fp,"%c",&c),c=='\r'||c=='\n')

    printf("\n");

}

return 0;

}

第3个回答  2022-05-25

如图所示

抱歉,我不是特别了解C语言,所以用的是C++

相似回答