strtok () в цикле будет работать для вас. Ниже приведен простой пример с очень малой обработкой ошибок и т. Д., Но он иллюстрирует концепцию ...
char strArray[4][80];
char *tok = NULL;
char *dup = strdup(origLine);
int i = 0;
if(dup)
{
tok = strtok(dup, "|\n");
while(tok)
{
strcpy(strArray[i], tok);
tok = strtok(NULL, "|\n");
i++;
}
free(dup);
}
Если вы читаете из файла, то поместите этот цикл в другой цикл while, который читает файл, строка за строкой. Функции, полезные для этого, будут включать fopen () , fgets () и fclose () . Еще одна особенность, которую следует учитывать для кода, который считывает данные из файла, - это определить количество записей (строк) в файле, который нужно прочитать, и использовать эту информацию для создания контейнера правильного размера, который будет заполняться результатами анализа. , Но это будет другой вопрос.
Примечание: fgetc () здесь не рекомендуется, поскольку он читает один char
на цикл, и будет менее эффективным, чем использование fgets()
для чтения строк из файла при использовании вместе с strtok()
.
Обратите внимание, в общем, чем более последовательно файл отформатирован с точки зрения количества полей, содержимого полей и т. Д., Тем менее сложным должен быть синтаксический анализатор. Обратное тоже верно. Менее согласованный формат входного файла требует более сложного синтаксического анализатора. Например, для введенных человеком данных строки требуемый синтаксический анализатор обычно более сложен, чем, например, используемый для компьютерного набора унифицированных линий.