我目前正在尝试将.csv文件读入C中的数组。我对如何处理问题有点不知所措。我已经浏览了很多论坛和相关主题,但我仍然无法掌握它。如果有人能够尽可能简单地向我展示或分解它。非常感谢。顺便说一下,.csv文件的内容是这样的。数组应该只包含字母和数字。我在考虑使用2-D阵列。这是一个合适的解决方案吗?
A,1
B,2
C,3
....
答案 0 :(得分:1)
首先定义数据结构:
struct my_record {
char name;
int value;
};
然后你可以这样读:
FILE* my_file = fopen(...);
struct my_record records[100];
size_t count = 0;
for (; count < sizeof(records)/sizeof(records[0]); ++count)
{
int got = fscanf(my_file, "%c,%d", &records[count].name, &records[count].value);
if (got != 2) break; // wrong number of tokens - maybe end of file
}
fclose(my_file);
现在你有一个结构数组,每行一个。
答案 1 :(得分:1)
您可以创建一个结构数组,如另一个答案所述。
获得struct
定义后:
typedef struct {
char letter;
int number;
} record_t;
然后你可以创建一个这样的结构数组:
record_t records[26]; /* 26 letters in alphabet, can be anything you want */
使用2D数组是不必要的,因为在struct
中包装字母和数字会更容易处理。
在阅读文件方面,您只需使用fscanf()
阅读,直到找不到2
值。
以下是您可以使用的一些基本代码:
#include <stdio.h>
#include <stdlib.h>
#define NUMLETTERS 26
typedef struct {
char letter;
int number;
} record_t;
int main(void) {
FILE *fp;
record_t records[NUMLETTERS];
size_t count = 0;
fp = fopen("letters.csv", "r");
if (fp == NULL) {
fprintf(stderr, "Error reading file\n");
return 1;
}
while (fscanf(fp, " %c,%d", &records[count].letter, &records[count].number) == 2) {
count++;
}
for (size_t i = 0; i < count; i++) {
printf("%c,%d\n", records[i].letter, records[i].number);
}
fclose(fp);
return 0;
}