C - Как прочитать файл из 4 столбцов в два строковых массива
Я пытаюсь прочитать файл неизвестной длины, который имеет следующий формат:
2082018 1200 79 Meeting
3082018 1300 60 Lunch
4082018 1400 30 Dinner
5082018 0600 90 Work
Япытается получить первый столбец внутри массива KEY_arr, а остальные столбцы внутри VAL_arr так, чтобы:
KEY_Arr[0]
= "2082018" и VAL_arr[0]
= "1200 79 Meeting"
Я попробовал два метода, оба безуспешно.В первом методе, который я попытался прочитать в файле, используя getc в 2D-массиве:
int main(int argc, char** argv) {
FILE *inp_cal;
int word_count = 0;
char c;
char arr[50][50];
int char_count = 0;
int space_cnt = 0;
char line[100];
int line_count = 0;
inp_cal = fopen("calendar_out.txt", "r");
if (inp_cal) {
printf("Processing file...\n");
while ((c = fgetc(inp_cal)) != EOF) {
if ((c == ' ' || c == '\n') && space_cnt == 0) {
arr[word_count][char_count] = '\0'; //Terminate the string
char_count = 0; //Reset the counter.
word_count++;
space_cnt = 1;
} else {
if ((c == ' ' || c == '\n') && space_cnt == 1) {
word_count++;
char_count = 0;
}
arr[word_count][char_count] = c;
printf("%c", arr[word_count][char_count]);
if (char_count < 50) {
char_count++;
} else {
char_count = 0;
}
}
}
} else {
printf("no file found.\n");
}
printf("\nword count: %d, char count: %d\n\n", word_count, char_count);
for (int i = 0; i < word_count; i++) {
printf("%s\n", arr[i]);
}
return (EXIT_SUCCESS);
}
Это дает следующий вывод:
2082018
1200
79
Meeting
3082018
1300
60
Lunch
4082018
1400
30
Dinner
5082018
0600
90
Work
Я застрял, когда дело доходит доразделение на отдельные строки для пар ключ и значение.
Второй метод, который я пытался использовать fgets
, но мне не удалось получить какой-либо правильный вывод:
if (inp_cal) {
printf("Processing file...\n");
while (fgets(line, sizeof line, inp_cal)) {
char KEY_arr[10];
char VAL_arr[50];
char KEY;
char VAL;
if (sscanf(line, "%29s%29s", KEY, VAL) != 2) { /* error, bad line */
printf("Bad line format\n");
} else {
KEY_arr[line_count] = KEY;
VAL_arr[line_count] = VAL;
printf("%c, %c\n", KEY_arr[line_count], VAL_arr[line_count]);
}
line_count++;
}
} else {
printf("no file found.\n");
}
Любые предложения поКак я могу улучшить один из вышеперечисленных методов для чтения в текстовом файле с 4 столбцами и хранения в двух массивах символов?