Я пытаюсь проанализировать файл .csv в следующем формате:
Пациент, минуты, калории, расстояние, этажи, сердце, шаги, уровень сна
Линия изменена ранеетак что пустые значения в строке (a ,,) меняются на -1, и перед этим в конце ставится запятая, поэтому, если sleep_level пуст, он тоже получает значение -1.
strcpy(data[i].patient, strtok(line, ","));
//Detect for correct patient
if (data[i].patient == patient) {
printf("Wrong patient, skiping data");
}
else {
//Minute (string)
strcpy(data[i].minute, strtok(NULL, ","));
if (i != 0 && strtok(NULL, ",") == data[i - 1].minute) {
}
else {
//Calories (double)
data[i].calories = atof(strtok(NULL, ","));
//Distance (double)
data[i].distance = atof(strtok(NULL, ","));
//Floors(unsigned int)
data[i].floors = atoi(strtok(NULL, ","));
//Heart Rate(unsigned int)
data[i].heartRate = atoi(strtok(NULL, ","));
//Steps(unsigned int)
data[i].steps = atoi(strtok(NULL, ","));
//Sleep level (enumertated var)
int sleepLvl = atoi(strtok(NULL, ",")); <-BREAKS HERE
if (sleepLvl == 0 || sleepLvl == -1) {
data[i].sleepLevel = NONE;
}
else if (sleepLvl == 1) {
data[i].sleepLevel = ASLEEP;
}
else if (sleepLvl == 2) {
data[i].sleepLevel = AWAKE;
}
else {
data[i].sleepLevel = REALLYAWAKE;
}
//Increment the index
i++;
}
В этом коде используются токены для запятых с анализируемыми строками для извлечения информации по одному разделу за раз и помещения их в массив структур для хранения всех данных.Следует отметить, что sleep_level является ENUM, но я думаю, что способ, которым я обработал его, является правильным.
Код разбивается на <-breaks здесь с необработанным исключением: недопустимый параметр был передан функции, которая считает недопустимые параметры фатальными. </p>
примерная строка для этих данных будет 12cx7, 0: 01: 00,0.968900025, -1,0,67,0,1,
что мне следует использовать в strtok (что я считаю источником ошибки), чтобы правильно проанализировать последнее значение