Я создаю простой жестко запрограммированный парсер csv, который выглядит следующим образом:
typedef struct {
char * id;
char * date;
} ROW;
int main(int argc, char *argv[]) {
// Load a file that is of a known csv format
// With fields separated by ","
// And allow a max line length of 255 chars
FILE * fp = fopen("test100k.csv", "r");
char* FIELD_SEPARATOR = ",";
char buffer[255];
int row_num = 0;
ROW row;
ROW * rows = malloc(sizeof(row) * 120000);
// The first line is the header so we can just skip it
(void) fgets(buffer, sizeof(buffer), fp);
while(fgets(buffer, sizeof(buffer), fp) != NULL) {
// split the row
char *token;
token = row.id = strtok(buffer, FIELD_SEPARATOR);
int num_sep_encountered = 1;
while( token != NULL ) {
token = strtok(NULL, FIELD_SEPARATOR);
switch(num_sep_encountered) {
case 1: row.date = token;
}
num_sep_encountered ++;
}
printf("ID: %s | Date: %s\n", row.id, row.date);
rows[row_num++] = row;
}
}
Я хотел бы изменить это так, чтобы у меня была вторая структура с именем ROWS
, которая выглядит следующим образом:
typedef struct {
ROW * row;
size_t size;
} ROWS;
Как мне создать и инициализировать эту структуру в следующих трех местах:
// initialize it -- how to do this?
ROWS rows= malloc(sizeof(row) * 120000);
// how keep appending a ROW to the ROWS in the for loop?
rows->row = row
// how to set the size
rows.size = row_num