Как прочитать определённые значения из файла?

Нужно загрузить из файла определённые значения: сам файл состоит из этого содержимого:

-Авторизация-
=====================
Ваш Токен: 0x9998509998332111
Ваш Логин: Tester
Ваш Пароль: testpassword123

Но этот метод просто читает всё с начальной строчки

public static void Load(string path, params TextBox[] contents)
{
  string result = Path.Combine(Dir, path);
  using (var sr = new StreamReader(result, Encoding.UTF8))
  {
     string[] line = sr.ReadToEnd().Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
     contents[0].Text = line[0];
     contents[1].Text = line[1];
     contents[2].Text = line[2];
  }
}

В каждый из текстбоксом нужно применить отдельные значения:

1 - 0x9998509998332111
2 - Tester
3 - testpassword123

Ответы (1 шт):

Автор решения: EvgeniyZ
  • Загружаем файл (или получаем эти данные от куда надо):

    File.ReadAllLines("Test.txt")
    
  • Берем из полученного массива строк только те, что содержат ::

    .Where(x => x.Contains(':'))
    
  • Преобразуем в разбитый массив по указанному символу:

    .Select(x => x.Split(':'))
    
  • Формируем словарь:

    .ToDictionary(k => k[0], v => v[1])
    

Весь код и пример использования:

var result = File.ReadAllLines("Test.txt")
    .Where(x => x.Contains(':'))
    .Select(x => x.Split(':'))
    .ToDictionary(k => k[0], v => v[1]);

var pass = result["Ваш Пароль"]; // testpassword123

Если хотите убрать "Ваш", то либо разбивайте по пробелу, либо делайте такое:

private static string FormateKey(string value)
{
    var values = new[] { "Токен", "Логин", "Пароль" };
    return values.FirstOrDefault(x => value.Contains(x));
}

и

.ToDictionary(k => FormateKey(k[0]), v => v[1]);

Если словарь вовсе не нужен, то:

.Select(x => x.Split(':'))
.ToDictionary(k => FormateKey(k[0]), v => v[1]);

заменяем на

.Select(x => x.Split(':').Last());

Это даст вам массив лишь необходимых значений.

→ Ссылка