Это на самом деле не простой ответ, но вы, возможно, хотя бы об использовании регулярного выражения для анализа информации?
Регулярные выражения - довольно хардкорные вещи, но они могут довольно легко анализировать расширенные файлы.
Так что в том, что я вижу, то это похоже на:
Если строка начинается с A-Z, то (a-z или A-Z или 0-9 или пробел) от нуля до много раз, затем следует:: затем пробел, а затем значение.
Так что, если вы сделаете регулярное выражение для этого (если вы подождете некоторое время, я постараюсь сделать его для вас), то вы можете проверить каждую строку с этим. Если это совпадает, то мы также можем использовать регулярные выражения, чтобы вывести последнюю часть, и «ключ». Если он не совпадает, мы просто добавляем его к последнему ключу.
Остерегайтесь того, что она не полностью защищена от дурака, так как новая линия может просто начаться таким образом, но я думаю, что это лучшее, что мы можем сделать.
Как и было обещано, вот отправная точка для вашего регулярного выражения:
^(?'key'[A-Z][a-z,A-Z,0-9,\s]+):\s(?'value'.+)
Итак, чтобы попытаться рассказать, что он делает, нам нужно пройти каждую часть:
- ^ гарантирует, что совпадение начинается в начале строки
- (? 'Key' - это синтаксис для начала группы "capture". Регулярное выражение затем даст нам доступ, чтобы легко вынуть "key" часть регулярного выражения.
- Мы с [A-Z] - это группа, которая будет соответствовать любой большой букве. Но только один
- [az, AZ, 0-9, \ s] + - аналогично предыдущей группе, но только для всех больших или маленьких букв, цифр и пробелов (\ s), плюс вне группа сообщает, что может соответствовать более чем одному.
- Затем мы просто заканчиваем группу и выводим *: , а затем пробел.
- Затем мы начинаем новую группу - группу value , точно так же, как группу ключей.
- Затем мы просто пишем . (это означает все), а затем просто + после этого, чтобы он поймал более одного
Я действительно думаю, что вы можете просто взять всю строку и просто сопоставить:
RegEx.Matches (или что-то в этом роде) и цикл по ним.
Затем просто возьмите match.Groups ["key"] и match.Groups ["value"] и поместите в ваш массив. (Извините, у меня нет Visual Studio под рукой, чтобы проверить это)