从 CSV 数据构造一个 C 数组

Construct a C array from CSV data

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

星表通常采用 .csv 格式,上面有很多数据,而且 有些插槽是空的 并且 并非所有插槽都有 int,双精度或浮点型数据.

我希望这个程序能够读取 "any" 星表(或者任何 .csv 文件)。

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

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"); 这样的主函数中实现时效果很好,所以我可以看到它在终端中读取了多少行(因此知道它以某种方式对它们进行计数)。

我需要知道如何将该数量存储为变量以便稍后在每个中声明数组大小和存储行位置,也许在那之后做一个线分割(并将每一行分成每一列)。

任何有关如何继续或更有效方法的见解都将受到赞赏。

你returns只是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 :-)

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