从CSV数据构造C数组

时间:2015-02-15 17:04:28

标签: c arrays csv count

所以,我正在尝试构建一个c程序,以便能够读取星形目录并将它们存储在数组中以供进一步分析。

星级目录通常采用.csv格式,并且有很多数据,还有一些插槽是空的并非所有插槽都有int,double或float类型的数据

我希望这个程序能够阅读"任何"星级目录(或任何.csv文件)。

我构建此类程序的第一个方法遇到了数组必须声明其大小的问题,我决定通过创建一个行和列计数器函数来绕过它,由主函数实现。

int* getfield(char* line){
    FILE *fp = fopen("./hipparcos.csv", "r");
    int ch;
    int lines=0;
    do{
        ch = fgetc(fp);
        if( ch== '\n'){
            lines++;    
        }    
    }while( ch != EOF );    

    printf("number of lines in the file %d\n",lines);
    return lines;
}

在主函数(如getfield("\n");)中实现时效果很好所以我可以看到它在终端中读取了多少行(因此知道它以某种方式计算它们)。

我需要知道 如何将该数量存储为变量 以便稍后在每个位置声明数组大小并存储行,之后可能会执行行拆分(并将每行分成每列)。

对于如何进行或更有效的方法的任何见解表示赞赏。

1 个答案:

答案 0 :(得分:1)

只返回int值,因此将函数头更改为

int getfield(char* line){

这不应该是一个指针。

还要考虑在文件的最后一行末尾不存在'\n'的可能性(在这种情况下,结果1将小于行数)。

修改

如果你只想计算行数,'\n'个字符的变化函数如下:

int getCharCount(char chr){
    FILE *fp = fopen("./hipparcos.csv", "r");
    int ch;
    int lines = 0;
    do{
        ch = fgetc(fp);
        if( ch == chr){
            lines++;   
        }    
    }while( ch != EOF );
    fclose(fp); 
    return lines;
}

您可以从main()例如:

拨打此电话
    printf("number of lines in the file %d\n", getCharCount('\n')); // maybe +1 needed :-)

但我知道它是你程序的草稿,所以考虑将文件名作为参数发送给你的函数。这使您的解决方案更加灵活。