代做单片机毕业设计网站,做全英文网站,大型企业展厅设计公司,毕设做网站怎么命题Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
本系列文章目录
[一] 基础篇
[二] 进阶篇——写入CSV
[三] 进阶篇——读取CSV 什么是 包裹#xff08;使用双引号…Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
本系列文章目录
[一] 基础篇
[二] 进阶篇——写入CSV
[三] 进阶篇——读取CSV 什么是 包裹使用双引号
包裹的概念是面向字段的包裹起来的字段将会被视为一个整体。尤其当字段中包含一些特殊符号如逗号、换行符、双引号时如果不将这些字段包裹起来则很有可能导致 CSV 文件解析发生错误。那么我们该如何包裹一个字段呢通常将一个字段放置在双引号()之间例如IDID就是一个被包裹的字段。任何字段都可以使用双引号()将其包裹起来并不存在任何限制。
字段中特殊符号的处理
根据上面的介绍如果一个字段中包含特殊符号那么在写入时必须使用双引号来包裹这个字段。有一点需要注意C语言中字符串中的双引号需要通过使用转义符号来表示()
下面分别用逗号、换行符、双引号来做示例
逗号fprintf(fp, 3,\z,xc\,3.3\n);换行符fprintf(fp, 4,\qw\nas\,4.4\n);双引号fprintf(fp, 5,\\aszx\\,5.5\n);第一个用作包裹字段第二个双引号才是实际的双引号。
完整的程序如下
// 2-1.c
#include
#include int main()
{FILE *fp fopen(tmp.csv, w);if (fp NULL) {fprintf(stderr, fopen() failed.\n);exit(EXIT_FAILURE);}fprintf(fp, ID,Name,Points\n);fprintf(fp, 1,qwe,1.1\n);int id 2;char *name asd;float point 2.2;fprintf(fp, %d,%s,%f\n, id, name, point);// special symbolsfprintf(fp, 3,\z,xc\,3.3\n);fprintf(fp, 4,\qw\nas\,4.4\n);fprintf(fp, 5,\\aszx\\,5.5\n);fclose(fp);return 0;
}运行程序查看 CSV 文件内容结果为 字段开头和结尾处的空格和制表符
CSV 文件中的字段中的开头和结尾上可能会存在空格或制表符但是该如何处理呢按照 RFC 4180 标准的规定“空格被看作字段的一部分不应当被忽略”。但是RFC 4180 并不是强制标准因此某些实现中空格和制表符会被截断掉。因此 fprintf(fp, 6,abc,6.6 \n); 写入的字段可能是 6,abc,6.6按照 RFC 4180 标准 或者是 6,abc,6.6空格被截掉
然而在 RFC 4180 标准中并未说明空格字符若出现在被包裹的值之外如何处理例如在 fprintf(fp, \7\,def,\7.7\ \n); 语句中如字段\7\虽然7被包裹但包裹之外的又有空格因此目前标准中对这样的空格该如何处理还没有规定可以保留也可以截掉。\7.7\ 字段也面临着同样的问题。
想要将这种空格视为字段中有意义的数据最省事的方法是将这些空格也包裹起来例如 fprintf(fp, \ 8\,ghi,\8.8 \\n); 语句中的 \ 8\、\8.8 \字段中属于字段的空格已被包裹。
完整的程序如下
// 2-2.c
#include
#include int main()
{FILE *fp fopen(tmp.csv, w);if (fp NULL) {fprintf(stderr, fopen() failed.\n);exit(EXIT_FAILURE);}fprintf(fp, ID,Name,Points\n);fprintf(fp, 1,qwe,1.1\n);int id 2;char *name asd;float point 2.2;fprintf(fp, %d,%s,%f\n, id, name, point);// special symbolsfprintf(fp, 3,\z,xc\,3.3\n);fprintf(fp, 4,\qw\nas\,4.4\n);fprintf(fp, 5,\\aszx\\,5.5\n);// leading or trailing spacesfprintf(fp, 6,abc,6.6 \n);fprintf(fp, \7\,def,\7.7\ \n);fprintf(fp, \ 8\,ghi,\8.8 \\n);fclose(fp);return 0;
}运行程序查看 CSV 文件内容结果为 分隔符可能存在的问题
在某些国家如德国、荷兰中小数点不是点而是逗号因此如果依然用逗号作分隔符那么将无法正确表示。那么该在保证小数点是逗号前提下如何避免CSV文件解析错误存在两种解决方法
将所有包含小数点的数字包裹起来使用分号而不是逗号作为分隔符
利用软件进行配置
无论是开头或结尾处的空格或制表符还是分隔符的选择在一些功能强大的软件中这些其实都可以进行配置下图分别展示了在 Microsoft Excel、LibreOffice Calc中如何解析CSV文件的配置界面。 如果想要了解偏基础的 C 语言读取写入 CSV 文件的内容欢迎阅读[一] 基础篇
如果想要了解进阶的 C 语言读取 CSV 文件的内容欢迎阅读[三] 进阶篇——读取CSV