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


           #include <stdio.h>
           #define F_PATH "d:myfilefile.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 ", 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

  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3379669.html
Copyright © 2020-2023  润新知