[英]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.