先介绍一下什么是csv文件,这是一种简单的文本文件,也被称为逗号分隔值文件。
主要是用于存储简单的数据,下面在weindows下用UE简单生成一下文件。
然后用excel打开
这就是一个简单的csv文件,每个字符都是一个ANSI码,图中的第一行,1,2,3,4,5,7。
1~7每一个都是一个ANSI码,一个逗号也是ANSI码。
第二行的12,13,434,45,56,747,“12”存储的是两个ANSI码,而“747”则存储了三个ANSI码,他们之间以逗号分隔。
类似的,第三行的“a”是一个ANSI码,“cd”是两个ANSI码。
也就是说,无论每一个逗号分隔的一个数值是多大,每一个值都是一个字符,如果换个理解方式就是,csv文件是一个很长很长的字符串。
然后是文件的大小,这个文件的大小是49字节。
通过直接数字符的方式,发现只有45个字符,包括所有逗号,多出了4个字节。
多出的四个字节在UE中看不到,这其实是windows独有的换行符“\r\n”,占了两个字符,45加上第一行和第二行的换行符就得到了49个字节的大小。
然后是关于文件名,windows默认文件名长256个字节,大小是固定的,但是不会再属性里面体现出来。
备注:linux的换行符是“\n”,占一个字符。
好了,关于csv文件的介绍到此结束。
下面是关于文件操作介绍,主要用到stdio.h这个文件头,这个是标准输入输出的一个头包含文件,为什么会将文件的操作放在标准输入输出的头包含文件里面,而不是重新创建一个file.h,按照《c语言程序设计——现代方法》的说法,所有的输入输出都是一种流,输入称为输入流,输出称为输出流,文件的读操作称为输入流,写操作称为输出流,就像往屏幕上打印东西称为输出流,键盘输入称为输入流,一切与系统的交互,本质上都是一种输入输出的行为。
然后是打开linux,用vim生成一个test.c文件,然后键入如下代码
#include "stdio.h"
int main(void)
{
FILE *f0;
char array[] = "1,2,3,4,5,7\n12,13,434,56,747\na,b,cd,efg,h,ij";
char array0[100];
if(NULL == (f0=fopen("/home/ma/TEST/ma.csv","a")))//打开一个ma.csv文件,
{ //如果不存在就创建
printf("can't not open file\n");
}
else
{
printf("Created file succeed!\n");//创建成功就输出这句话
fwrite(array,sizeof(array),1,f0);//给文件写入array数组
fread(array0,sizeof(array),1,f0);//然后将文件内容读取到array0中
printf("%s\n",array0);//输出文件内容
fclose(f0);//关闭文件
}
}
在linux下的操作截图如下
先用gcc 编译test.c,生成a.out,然后强制执行a.out,这里有个小细节,在linux下,生成的a.out文件一般用户是没有执行权限的,如果不限输入sudo的话,需要对当前的文件夹获取写入权限,使用chmod这个命令。执行a.out之后,生成了一个ma.csv文件,再说一件事,在linux下,一切都是文件,而文件名仅仅是一个标识符,"*.csv"是没有意义的,不要在意拓展名是啥,这仅仅起到一个关联执行程序的意义,对真实的文件内容没有啥关系。
好了,这是一个简单的文件操作入门,具体的文件操作函数我就不介绍了,请参考 《c语言程序设计——从入门到放弃》。
写于2017年5月27日
深圳