Как пропустить строки, пока не найду строку определенного формата? - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь реализовать цикл, который будет читать строки из файла, пока не найдет строку с определенным форматом.А именно, до тех пор, пока не будет найдена строка с:

цифрой, цифрой, цифрой

и ничем (кроме пробелов или табуляции) до новой строки.В частности, материал, который я должен пройти, пока не найду такую ​​строку, всегда будет содержимым матрицы 'lines.rows', , но ее точки данных не обязательно аккуратно упорядочены в строки 'линий'элементы строкОни могут иметь любое количество пробелов, табуляции или новых строк между каждым элементом.

Однако после элементов lines.rows всегда будет строка в формате, который я сканирую, после произвольного количества пробелов,табуляции или перевода строки после последнего элемента матрицы.

Я пытался в течение нескольких часов использовать fgets и fscanf по-разному для достижения этой цели, но вывод просто не правильный.Прямо сейчас у меня есть это:

        for (i=0;i<lines;i++)
    {
        for(j=0;j<rows;j++)
        {
            fscanf(in_fp, "%d", &temp);
        }
    }

, который работает, но занимает слишком много времени в больших матрицах.Помимо этого я пробовал, например,

        for (i=0;i<lines;i++)
    {
            fscanf(in_fp, "%*[^\n]\n", NULL);
    }

, который не работал.Идея заключалась в том, чтобы перейти к концу каждой строки, а затем также прочитать новую строку, чтобы начать в начале следующей строки.Однако к концу этого цикла мой файл не указывал на правильную строку (которая будет с форматом, указанным выше -% d% d% c% d).Вместо этого он указывал на «случайную» строку в середине матрицы.

Я также попробовал тот же код, что и выше, но с fgets.Когда я запустил fscanf, следуя циклу fgets для всех строк матрицы, я все равно не прочитал строку, которая должна идти дальше (с указанным выше форматом).

Если у вас есть какие-либо входные данные накак этого добиться или как сделать этот вопрос более понятным, я был бы очень благодарен.

...