2016-12-19 7 views
3

У меня есть структура ...Содержания CSV-файл в структуру в С.

struct myStruct { 
    char Topic[8]; 
    char Unit[8]; 
    char Prim[1]; 
    char Temp[2]; 
    ... 
    ... 
    ... 
    }; 

Я разбор данных из файла csv. Где каждый токен является членом структуры в этом порядке.

ptr = fgets(record, MAX_RECORD, fpIn); 
strcpy(eachRow, record); 
token = strtok(eachRow, ","); 
while(token != NULL) 
{ 
    printf("Token = %s \n", token); 
    // I have to copy the token into that members of the structure in that order. 
    token = strtok(NULL, ","); 
} 

Как можно сопоставить structuer указателя члены сообщества, так что я могу использовать в цикле, чтобы скопировать маркер непосредственно в элемент структуры?

+0

Обратите внимание, что маркеры _strings_ и 'char Prim [1];' достаточно велики для строки '' ''. – chux

+0

@chux: Да, я отметил это. Благодарю. – NJMR

ответ

5

Я просто хотел бы использовать статический массив смещений, вычисленный на этапе компиляции, используя offsetof():

static const size_t fields[] = { 
    offsetof(struct myStruct, Topic), 
    offsetof(struct myStruct, Unit), 
    offsetof(struct myStruct, Prim), 
    ... 
}; 

Затем шаг через это, как вы разметить каждое поле. Конечно, вы можете сделать это лучше, также включая максимальный размер поля, чтобы предотвратить перезапись.

Также обратите внимание, что в целом анализ CVS может быть более сложным, чем вы думаете, поэтому для его использования может потребоваться использование сторонней библиотеки, если это важно.

+1

'offsetof()' является хорошим первым шагом. Уверенный, что OP также потребуется что-то вроде следующего псевдокода: 'static const size_t fields_sz [] = { sizeof (struct myStruct.Topic), sizeof (struct myStruct.Unit), ...' для передачи размера. Смещение само по себе выглядит недостаточным. – chux

 Смежные вопросы

  • Нет связанных вопросов^_^