Я пытаюсь разобрать строку CSV-файла следующим образом:
47369758,Ysabel,Rosalie,Matthewson,41,76,47,42,70,83
69054587,Errick,Clareta,,34,67,57,43,27,49
95926740,Gottfried,Farr,Sampson,95,100,61,46,2,85
формат: id, firstName, фамилия, middlename, hw1, hw2, hw3, midterm1, midterm2, final.И, возможно, не было второго имени, как я могу использовать sscanf для правильного чтения второй строки.
Сначала я использую getline, чтобы построчно читать файл, а затем помещаю строку в sscanf для анализа, чтобы получить правильное значение.соответствующее значение, и я читаю char за char, чтобы увидеть, есть ли в строке непрерывная запятая, если есть две запятые, используйте sscanf без второго имени
char *line = NULL;
size_t len = 1000;
while(getline(&line, &len, stdin)!= EOF)
{
int idNum, final;
char* firstName = malloc(100);
char* lastName =malloc(100);
char* middleName =malloc(100);
int hw1, hw2, hw3;
int m1, m2;
Student * student = malloc(sizeof(Student));
student->m_scores = malloc(sizeof(Midterms));
int i;
int counter =0;
for (i=0; i< strlen(line); i++){
if(line[i] == ',' && line[i+1] == ',')
{counter++;}
}
printf("counter: %d\n", counter);
if (counter == 1)
{
sscanf(line,"%d ,%[^,],%[^,],%0[^,],%d ,%d,%d,%d,%d,%d\n",&idNum, firstName, lastName,middleName, &hw1, &hw2, &hw3, &m1, &m2, &final);
}
else{
sscanf(line,"%d ,%[^,],%[^,], %[^,],%d ,%d,%d,%d,%d,%d\n",&idNum, firstName, lastName, middleName, &hw1, &hw2, &hw3, &m1, &m2, &final);
}
вот мой код для чтения строки без второго имени
sscanf(line,"%d ,%[^,],%[^,],%d ,%d,%d,%d,%d,%d\n",&idNum, firstName, lastName, &hw1, &hw2, &hw3, &m1, &m2, &final);
вот мой код для чтения строки с отчеством
sscanf(line,"%d ,%[^,],%[^,], %[^,],%d ,%d,%d,%d,%d,%d\n",&idNum, firstName, lastName, middleName, &hw1, &hw2, &hw3, &m1, &m2, &final);
вот мои фактические результаты
47369758,Ysabel,Rosalie,Matthewson,41,76,47,42,70,83
69054587,Errick,Clareta,,41,76,47,42,70,83
95926740,Gottfried,Farr,Sampson,95,100,61,46,2,85
здесь ожидаемый результат
47369758,Ysabel,Rosalie,Matthewson,41,76,47,42,70,83
69054587,Errick,Clareta,,34,67,57,43,27,49
95926740,Gottfried,Farr,Sampson,95,100,61,46,2,85