簡體   English   中英

根據CSV數據構造一個C數組

[英]Construct a C array from CSV data

因此,我正在嘗試構建一個ac程序,以便能夠讀取星級目錄並將其存儲在數組中以進行進一步分析。

星型目錄通常以.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");這樣的主要函數中實現時,效果很好 因此我可以看到終端中正在讀取多少行(因此知道它以某種方式對其進行計數)。

我需要知道如何將數量存儲為變量,以在以后聲明數組大小並在每個位置存儲行,然后在行之后拆分行(並將每行分成每列)。

任何有關如何進行或更有效的方法的見解都將受到贊賞。

您只返回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 :-)

但我知道這是程序的草稿,因此可以考慮將文件名作為參數發送給函數。 這使您的解決方案更加靈活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM