2011-02-25 57 views

回答

2

假設我的.csv文件看起來像這樣,
的字段是項目編號類別號供應商編號

1111,1414,1000 
1112,1010, 1001 
1113,1112,1002  

閱讀上述.csv文件的值的C代碼:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char* argv[]) 
{ 
    if (argc < 2) 
    { 
     fprintf(stderr,"Usage: %s csv_file\n",argv[0]); 
     return(1); 
    } 

    FILE *f = fopen(argv[1], "rt"); 
    char Line[256]; 
    unsigned int AllocSize = 0, Size = 0, n; 
    char *L_text; 

    while(fgets(Line, sizeof(Line), f)) 
    { 

     printf("Item = %s \n",strtok(Line, ", ")); 
     printf("Class = %s \n",strtok(NULL, ", ")); 
     printf("Supplier = %s \n",strtok(NULL, ", ")); 

    } 
    return(0); 
} 
2

也許你可以看看libcsv

+0

我必須安裝它libcs​​v謝謝 – tariq 2011-02-25 13:46:50

+0

如何安裝我的意思是什麼是表示沒有找到它在網上親切指導我 – tariq 2011-02-25 13:48:41

+0

是的,你必須安裝它。 'make'然後'make install'。 – 2011-02-25 15:16:41

1

我認爲這取決於文件的大小。如果這些行不是太大,不會太多,並且你不關心你的程序是否不能用GNU以外的libcs​​運行,你可以使用getline函數將整行讀入內存,直到達到最後。那麼它應該像找到第一個逗號一樣簡單。

如果你有一個由小行組成的大文件,你可以看到文件的末尾,並按字節備份字節,直到找到'\ n'。然後你在最後一行的開頭。

如果文件和行都很大,也許在整個文件上做一個mmap到它的結尾,然後回讀'\ n'可能會比所有這些fseeks更有效率。儘管mmap可以說比fseeks便於攜帶(因爲fseek是標準C)。

+0

這可能是最直接的方法。尋找到最後,直到你擊中一個換行符,然後提取文本,直到你點擊第一個逗號。 – bta 2011-02-25 18:25:00