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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM