Звучит так, как будто вам нужно сделать одну из двух вещей.
Более простая опция : сохранить небольшой круговой буфер строк. Прочитайте строку 0, строку 1, строку 2, ..., строку n-1, строку 0, строку 1 и т. Д. Затем, когда вы увидите нужный текст, посмотрите в записи (current_index - 2) мод buffer_size. (Здесь звучит так, как будто размера буфера будет достаточно 3).
Более сложная опция : фактически проанализируйте входные данные, чтобы для каждого блока вы работали с именем сервера, его IP-адресом и его состоянием, а затем отображали нужную вам информацию, используя это.
«Более сложный вариант» будет значительно более трудоемким, но более надежным, если синтаксис вашего ввода когда-либо изменится (например, с дополнительными дополнительными строками с дополнительной информацией о сервере - возможно, с несколькими IP-адресами или несколькими именами) .
Есть и другие вещи, которые вы могли бы сделать, я думаю, хуже. (1) Вызовите ftell
в каждой строке и поместите результаты , что в круговой буфер, а затем используйте fseek
, когда увидите «status: green». (2) Прочитайте весь файл, используя код, который у вас есть на данный момент, составив список номеров строк «хороших» серверов. Затем снова просмотрите файл и сообщите о хороших. Я думаю, что они более уродливы и менее эффективны, чем подходы, которые я перечислил выше. Есть одно возможное преимущество: вы можете адаптировать их для подсчета в «строфах», разделенных пустыми строками, без необходимости правильного разбора. Это даст вам часть гибкости «более сложного» подхода, о котором я говорил, без необходимости правильного парсера.
И вот гибридная возможность: не используйте круговой буфер, но тот, размер которого может увеличиться, если это будет необходимо. Начните с первой записи в буфере каждый раз, когда вы видите пустую строку. Пусть буфер растет, если есть "длинные" строфы. Затем, когда вы увидите «status: green», выполните любую необходимую обработку в (предположительно завершенном) разделе, который теперь содержится в вашем буфере.
Ничего из вышеперечисленного не требуется, конечно, если вы уверены, что формат файла никогда не изменится.