Как читать и обрабатывать несколько строк, которые принадлежат друг другу? - PullRequest
0 голосов
/ 18 мая 2018

Я читаю файл с StreamReader.Теперь я хочу прочитать cotent в Dictionary<string, List<string>>

Файл, который я читаю, выглядит следующим образом:

'someKey'
Value1someKey
'anotherKey'
Value1another Value2anotherKey

Я нахожусь в точке, где я получаю ключи со следующим кодом

reactionInfo = new Dictionary<string, List<string>>();
string line;
StreamReader reader = new StreamReader(filePath);
while ((line = reader.ReadLine()) != null)
{
   if (line.Trim().StartsWith("'"))
   {
      List<string> values = new List<string>();
        if(!reactionInfo.TryGetValue(line,out values))
        {
          reactionInfo.Add(line, new List<string>());
        }
    }
 }

Как мне сопоставить значения следующей строки с ключом, который находится в строке выше?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Сохраните копию вашего последнего прочитанного ключа, затем используйте его для добавления значений в следующую строку.

reactionInfo = new Dictionary<string, List<string>>();
string line;
using (var reader = new StreamReader(filePath))
{
    var lastKey= "";
    while ((line = reader.ReadLine()) != null)
    {
       if (line.Trim().StartsWith("'"))
       {

            if(!reactionInfo.ContainsKey(line))
            {
              reactionInfo.Add(line, new List<string>());
              lastKey = line;
            }

        }else
            {
              reactionInfo[lastKey].AddRange(line.Split(' ').ToList());
            }
     }
}
0 голосов
/ 18 мая 2018

Прочитайте следующую строку в цикле, чтобы добавить эти значения при добавлении записи в словарь.В следующих строках читается следующая строка, которую можно добавить при добавлении.

var valuesStrings = reader.ReadLine().Split(' ');

Полный код:

reactionInfo = new Dictionary<string, List<string>>();
string line;
using(StreamReader reader = new StreamReader(filePath))
{
    while ((line = reader.ReadLine()) != null)
    {
       if (line.Trim().StartsWith("'"))
       {
            List<string> values = new List<string>();
            if(!reactionInfo.TryGetValue(line,out values))
            {
              var valuesStrings = reader.ReadLine().Split(' ');
              reactionInfo.Add(line, values.Length > 0 ? new List<string>(new List<string>(valuesStrings)) : new List<string>());
            }
        }
     }
 }

Дополнительное предложение:

Завершение StreamReader в блок использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...