我目前正在嘗試將一個.csv文件讀入C中的一個數組中。我在如何解決這個問題方面有點茫然。我瀏覽了很多論壇和相關話題,但我仍然無法理解它。如果有人能夠展示我或儘可能簡單地分解它。這將不勝感激。順便說一句,.csv文件的內容是這樣的。該數組應該只包含字母和數字。我正在考慮使用二維數組。這是一個合適的解決方案?將.csv文件讀入C中的一個數組中
A,1
B,2
C,3
....
我目前正在嘗試將一個.csv文件讀入C中的一個數組中。我在如何解決這個問題方面有點茫然。我瀏覽了很多論壇和相關話題,但我仍然無法理解它。如果有人能夠展示我或儘可能簡單地分解它。這將不勝感激。順便說一句,.csv文件的內容是這樣的。該數組應該只包含字母和數字。我正在考慮使用二維數組。這是一個合適的解決方案?將.csv文件讀入C中的一個數組中
A,1
B,2
C,3
....
開始通過定義的數據結構:
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);
現在你有結構的一維數組,每行一個。
如果某一行中的條目數量有所不同,該怎麼辦? –
@Plutoniumsmuggler:然後你可以爲每一行存儲一個'std :: vector
C沒有std :: vectors。我的意思是C不是C++(如問題所述) –
您可以創建一個結構數組,如其他答案所述。
一旦你擁有了struct
定義:
typedef struct {
char letter;
int number;
} record_t;
然後您可以創建結構的數組是這樣的:
record_t records[26]; /* 26 letters in alphabet, can be anything you want */
使用二維數組是不必要的,因爲包裝的字母和數字在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;
}
是它有點重複的問題,我也來看看之前做這一個論壇。我仍然不明白。 – mac