Простите за плохой синтаксис C # - я привык к VB .NET. Не смейся.
Сначала я прочитал бы строки текста файла в массив строк.
foreach (string line in File.ReadLines("path-to-file")) {
}
Для каждой строки вы находитесь либо в строке «ключ», либо в строке «значение». Ключевые строки выглядят так:
[01]: Broadcom
Чтобы определить, находитесь ли вы в «ключевой» строке, вы можете попробовать что-то вроде line.Trim().StartsWith("[")
, но это не сработает надежно, потому что у вас есть другие строки, похожие на [01]: abc.def.ghi.jkl
, которые являются IP-адресами, и не ключи. Поэтому вам нужно быть немного умнее и, возможно, даже использовать регулярное выражение, чтобы определить, смотрите ли вы на IP-адрес или сетевую карту. Я не знаю точных спецификаций файла, который вы просматриваете, но вы также можете использовать начальные пробелы / табуляции, чтобы определить, находитесь ли вы в строке «ключ» или «значение».
Ваш код будет выглядеть примерно так:
var networkCards = new Dictionary<String, String>();
string currentKey = String.Empty;
foreach (string line in File.ReadLines("path-to-file")) {
if ( IsKeyLine( line ) ) {
currentKey = line.Trim();
networkCards.Add(currentKey, "");
} else {
networkCards[currentKey] += line.Trim() + " ";
}
}
Необходимо написать метод IsKeyLine
, и это суть всей операции. Вот пример метода, основанного на регулярных выражениях, который вы можете использовать:
public bool IsKeyLine(string line) {
if (!String.IsNullOrEmpty(line)) {
//run two regexes - one to see if the line is of the general pattern of a "key" line
//the second reg ex makes sure there isn't an ip address in the line, which would indicate that the line is part of the "value" and not the "key"
return System.Text.RegularExpressions.RegEx.IsMatch(line, @"^\s*\[\d{0,2}\]: ")
&& !System.Text.RegularExpressions.RegEx.IsMatch(line, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
}
return false;
}
Теперь я не потратил время на тестирование любого из этого кода - это не в моей голове. Но это должно по крайней мере заставить вас двигаться в общем правильном направлении. Самая большая вещь, которую нужно определить - это стандарт для формата файла. Это даст вам подсказки, чтобы идти по правильному пути. Возможно, вам даже не понадобятся регулярные выражения (что было бы предпочтительнее, поскольку регулярные выражения обычно дороги в запуске).