C语言对文件的读写操作以及处理CSV文件的方法

       #include <stdio.h>
       #define F_PATH "d:\myfile\file.txt"

        int main(void)
        {
            FILE *fp = NULL; //需要注意
            fp = fopen(F_PATH, "a");
            if(NULL == fp)
            {
                return -1; //返回错误代码
            }
CString a = "a";
CString b = "b";
CString c = "c";

              fprintf(fp, "%s,%s,%s\n", a, b, c);  //写入a,b,c到文件中

            fclose(fp);
            fp = NULL; //需要指向空,否则会指向原打开文件地址
            return 0;
        }

上面是用C语言写内容到文件中去,下面是从文件中读取:

#include <stdio.h>

    int main(void)
    {
        FILE *fp = NULL;
        char line[1000];
        if((fp = fopen("test.csv","at+")) != NULL)
        {
            char delims[] = ",";
            char *result = NULL;

            CString a,b;
            while (fgets(line, MAX_LINE, fp))
            {
                result = strtok( line, delims );
                a = result;
                result = strtok( NULL, delims );
                b = result;
            }
            fclose(fp);
            fp = NULL;
        }
    }

下面记录下C语言处理CSV文件的方法:

什么是CSV文件

CSV是 Comma-separated values (逗号分隔值)的首字母缩写,它通常是以逗号且不仅限于逗号分隔各个值,我们都叫他CSV。看下面的例子:

China, Shanghai, Pudong, Zhang San, 200000, 1234567

BMW; GER; 300000; RMB; i530

从上面两个例子可以看出,可以用不同的分隔符来分隔数据;数据的类型可以不同;长度任意。

由多行这样的CSV组成的文件叫做CSV文件(逗号分隔值文件)。当然,他们必须用同样的分隔符,对应每一列的数据要有相同的含义,不然这个文件就是无意义的。CSV文件可以直接用Microsoft Office中的Excel打开,这里不讨论Windows下的操作。

C语言编程处理CSV文件

通常CSV文件中包含大量有用信息,而且有时数据量庞大,一个数据文件会达到1G的大小,一般都是日志等重要信息。对CSV文件的处理也有很多方法,常见的就是用Bash, Python, Perl 等脚本语言来处理。这里提供一种用C语言处理CSV文件的方法。以下过程都是在Linux环境下进行的,Windows用户请注意移植。
C语言标准库中有一个字符串(string.h)函数 strtok ,它的原型是

char *strtok( char *s, const char *ct );

它以 ct 中的字符为分界符,将字符串 s 分成许多记号。第一次调用时,它搜索 s ,找到不包含ct的第一个记号,将 s 中的下一个字符替换为 ‘/0’ ,并返回指向记号的指针。随后调用 strtok 函数时(由 s 的值是否为NULL指示),返回下一个不包含 ct 中字符的记号。当 s 中没有这样的记号时,返回NULL 。每次调用时的 ct 可以不同。

注意红色标记的部分,这个函数的使用方法是(假设以逗号为分隔符):

char str[] = “Life is like, a box of chocolate, you never, know what you’re, gonna get”;
char delims[] = “,”;
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( “%s /n”, result );
result = strtok( NULL, delims );
}

OUTPUT:
life is like
a box of chocolate
you never
know what you’re
gonna get

 

部分资料来源:http://blog.sina.com.cn/s/blog_4936c31d010104w7.html

posted @ 2013-10-20 22:32  紫清婷  阅读(26665)  评论(0编辑  收藏  举报