所以,我正在尝试构建一个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");
)中实现时效果很好所以我可以看到它在终端中读取了多少行(因此知道它以某种方式计算它们)。
我需要知道 如何将该数量存储为变量 以便稍后在每个位置声明数组大小并存储行,之后可能会执行行拆分(并将每行分成每列)。
对于如何进行或更有效的方法的任何见解表示赞赏。
答案 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 :-)
但我知道它是你程序的草稿,所以考虑将文件名作为参数发送给你的函数。这使您的解决方案更加灵活。