2011-02-25 54 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