C将存档的行转换为数组
我有一个存档,我想把每一行变成一个数组:v [i] .data。 但是,当我运行代码时,它会为数组显示零。 有什么我应该改变的吗?
输入
1760
2月20日/ 18,11403.7
2月19日/ 18,11225.3
2月18日/ 18,10551.8
2月17日/ 18,11112.7
2月16日/ 18,10233.9
实际产出
1761
0
预期产出
1761
2月20日/ 18,11403.7
#include #include #include #include typedef struct{ char data[20]; }vetor; int main(int argc,char *argv[]){ FILE *csv; if((csv=fopen(argv[1], "r")) == NULL ) { printf("not found csv\n"); exit(1); } long int a=0; char linha[256]; char *token = NULL; if(fgets(linha, sizeof(linha), csv)) //counting lines { token = strtok(linha, "\n"); a =(1 + atoi(token)); } printf("%d\n", a); rewind(csv); vetor *v; v=(vetor*)malloc(a*sizeof(vetor)); char linha2[256]; while (fgets(linha2, sizeof(linha2), csv) != 0) { fseek(csv, +1, SEEK_CUR); for(int i=0;i<a;i++) { fscanf(csv, "%[^\n]", v[i].data); } } printf("%s\n", v[0].data); fclose(csv); return 0; }
出现了一些错误,所以我继续用问题解释我所做的事情来重写问题区域
#include #include #include typedef struct{ char data[20]; }vetor; int main(int argc,char *argv[]){ FILE *csv; if((csv=fopen(argv[1], "r")) == NULL ) { printf("not found csv\n"); exit(1); } char line[20]; // Read number of lines int num_lines = 0; if (!fgets(line, sizeof(line), csv)) { printf("Cannot read line\n"); exit(1); } char* token = strtok(line, "\n"); num_lines = atoi(token) + 1; vetor* v = malloc(num_lines * sizeof(vetor)); // Fill in vetor int i = 0; while (fgets(line, sizeof(line), csv) != NULL) { int len = strlen(line); line[len-1] = '\0'; // replace newline with string terminator strcpy(v[i].data, line); //copy line into v[i].data i++; } printf("%d\n", num_lines); for (i = 0; i < num_lines; i++) { printf("%s\n", v[i].data); } return 0; }
我认为主要的错误是误解了如何最好地阅读每一行信息。 如果我理解正确,你希望每个02/20/18,11403.7
线都是02/20/18,11403.7
数组中的一个元素。
最简单的方法是使用fgets一次只获取一行
while (fgets(line, sizeof(line), csv) != NULL)
将结束字符从换行符更改为终止字符'\0'
的字符串
int len = strlen(line); line[len-1] = '\0';
然后将字符串复制到vetor
的第i个元素中并更新i
以进行循环的下一次迭代。
strcpy(v[i].data, line); i++;