我必须打开一个.txt文件。假设文件的内容是:
08123, (12/10/2010,M), (01/09/1990,D)
我想存储字符串08123
,"12/10/2010"
和'M'
的不同参数,例如:
int code = 08123;
char date[10] = '12/10/2010';
char day = 'M';
此外,最后一个参数以)
结束。如何迭代它直到行结束?
答案 0 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct date {
char date[11];//+1 for '\0'.
char day;
} Date;
typedef struct rec {
int code;
int dc;//number of Date
Date *dates;
} Record;
Record *parse_rec(char *line){
static const char *sep = ", ";
static const int seplen = 2;//strlen(sep);
Record *rec = malloc(sizeof(*rec));
if(rec){
int i, count = 0;
char *p;
for(p=strstr(line, sep);p;p = strstr(p+seplen, sep)){
++count;
}
rec->dc = count;
rec->dates = malloc(count*sizeof(Date));
rec->code = atoi(line);
line = strstr(line, sep) + seplen;
for(i=0;i<count;++i){
sscanf(line, "(%[^,],%c", rec->dates[i].date, &rec->dates[i].day);
line = strstr(line, sep) + seplen;
}
}
return rec;
}
int main(void){
char line[1024];
FILE *fp = fopen("data.txt", "r");
fgets(line, sizeof(line), fp);
fclose(fp);
Record *rec = parse_rec(line);
printf("code: %05d\n", rec->code);
for(int i=0;i < rec->dc; ++i){
printf("date : %s\n", rec->dates[i].date);
printf(" day : %c\n", rec->dates[i].day);
}
free(rec->dates);
free(rec);
return 0;
}