Я работаю над проектом, чтобы разобрать текстовый файл. Файл выводится из сетевого оборудования. Длина входящей строки составляет от нескольких тысяч до десятков тысяч строк. Там будет переменное количество записей с такими ключевыми словами, как эти:
fcN/N is up
Hardware is Fibre Channel, SFP is short wave laser w/o OFC (SN)
Port WWN is 20:52:00:0d:ec:ef:b0:40
Admin port mode is F, trunk mode is on
snmp link state traps are enabled
Port vsan is 10
fcipN is up
.....
port-channel-N is trunking
......
N - это число. Всегда будут записи 'fcN / N', могут быть или не быть две другие. Записи 'fcip' и 'port-channel' после каждой будут иметь информацию о статусе, аналогичную записям fcN / N. Все записи одного и того же типа будут сгруппированы - не будет fc, за которым следует fcip, за которым следует другой fc. Также, как правило, перечислены все записи fc, затем все port-channel, затем все fcip, но я не хочу этого допускать. На данный момент у меня есть около 7 различных шаблонов RegEx, которые я ищу. Я делаю это, рассматривая каждую строку по очереди, однако управлять всеми этими функциями громоздко. Я думал о том, чтобы разбить строку на новую строку, а затем выбрать какой-то тип LINQ, чтобы получить все записи каждого из трех типов, но это предполагает, что они всегда группируются в одном и том же порядке. Я также подумал о трех регулярных выражениях монстров, чтобы соответствовать всему от одной записи к другой, но мой опыт таков, что трудно работать и почти нечитаемо. Еще одна вещь, о которой я подумал: сначала сопоставьте три ключевых слова - fc или port-channel или fcip, а затем оператор if, соответствующий шаблонам, уникальным для них. Это все еще соответствует каждой строке для всех 3 паттернов.
Чтобы было ясно, у меня работают шаблоны Regex. Я ищу более эффективный способ сделать это, чем проверять каждую строку на 6 0r 8 совпадений.
Есть еще идеи?