Как сделать удаление строк из файла? - PullRequest
0 голосов
/ 01 июня 2019

ключ - это имя игрока, значение - запись (в секундах), есть код, который нужно улучшить

У меня есть файл с именем и результатом игрока (онизаписаны в другой форме), в этой форме эти данные заносятся в словарь, а затем 5 лучших результатов распределяются по рейтингу.

Цель: сделать удаление из файла

нижемои попытки сделать это:

private static Dictionary<string, int> AllNames()
{
    return File
      .ReadLines(@"C:\Users\D205\Desktop\картинки\results.txt")
      .Where(line => !string.IsNullOrWhiteSpace(line))
      .Select(item => item.Split(' '))
      .ToDictionary(items => items[0],
                    items => int.Parse(items[1]));
}


private void updateRatingLabels()
{
    var tops = AllNames()
      .OrderBy(pair => pair.Value)                      
      .ThenBy(pair => pair.Key, StringComparer.Ordinal) 
      .Take(5)                                           
      .ToArray();

    if (System.IO.File.ReadAllLines(@"C:\Users\D205\Desktop\картинки\results.txt").Length >5)
    {

        for (int i = 18; i <= 22; ++i)
            Controls.Find($"label{i}", true).First().Text = "";

        for (int i = 28; i <= 32; ++i)
            Controls.Find($"label{i}", true).First().Text = "";


        for (int i = 0; i < tops.Length; ++i)
        {
            Controls.Find($"label{i + 18}", true).First().Text = tops[i].Key;
            Controls.Find($"label{i + 28}", true).First().Text = $"{tops[i].Value / 60}:{tops[i].Value % 60:00}";  //Controls.Find($"label{i + 28}", true).First().Text = tops[i].Value.ToString();
               // remove tops.key


        }

        for (...)
        {
            // set delete from file by key
            // remove these items from the dictionary
        }



    }

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Так много способов сделать это ... вот один:

// @"C:\Users\D205\Desktop\картинки\results.txt"
private static String FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "SomeFile.txt"); 

private static Dictionary<string, int> AllNames()
{
    return File
      .ReadLines(FileName)
      .Where(line => !string.IsNullOrWhiteSpace(line))
      .Select(item => item.Split(' '))
      .ToDictionary(items => items[0],
                    items => int.Parse(items[1]));
}

private static void WriteNames(Dictionary<string, int> AllNames)
{
    var lines = AllNames
       .Select(kvp => kvp.Key + " " + kvp.Value.ToString())
       .ToArray();
    File.WriteAllLines(FileName, lines);
}

private void button1_Click(object sender, EventArgs e)
{
    var top5 = AllNames()
       .OrderBy(pair => pair.Value)
      .ThenBy(pair => pair.Key, StringComparer.Ordinal)
      .Take(5);

    var tops = top5.ToArray();

    // ... your existing code to work with "tops" ...

    // write out the new file
    Dictionary<string, int> top5dict = new Dictionary<string, int>();
    foreach(var pair in top5)
    {
        top5dict.Add(pair.Key, pair.Value);
    }
    WriteNames(top5dict);
}
0 голосов
/ 01 июня 2019

Вы должны сделать File.WriteAllLines с данными из словаря, где вы удалили элементы.Поэтому вам просто нужно перезаписать старый файл.

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