как упорядочить записываемые данные в текстовый файл по счету в c # - PullRequest
0 голосов
/ 30 марта 2019

Я делаю приложение для викторины для своего компьютерного курса и работаю на конечном экране, а на конечном экране у меня есть метод savescore ()

Функция savescore () предназначена для сохранения имени пользователя, счета и времени пользователя в текстовом файле. метод savescore () прекрасно сохраняет данные пользователей в текстовом файле с именем Scores, но моя проблема в том, что когда я записываю данные пользователя в текстовый файл, я хочу, чтобы данные записывались в текстовый файл показателей в порядке убывания оценки и я не могу понять, как это сделать.

 private void SaveScore()
    {
        string file = @"..\..\textfiles\scores.txt";

        try
        {
            //
            // Create file if not exists
            //
            if (!File.Exists(file))
            {
                File.Create(file).Dispose();
            }

            //
            // Create DataTable
            //
            DataColumn nameColumn = new DataColumn("name", typeof(String));
            DataColumn scoreColumn = new DataColumn("score", typeof(int));
            DataColumn timeColumn = new DataColumn("time", typeof(long));



            DataTable scores = new DataTable();
            scores.Columns.Add(nameColumn);
            scores.Columns.Add(scoreColumn);
            scores.Columns.Add(timeColumn);


            //
            // Read CSV and populate DataTable
            //
            using (StreamReader streamReader = new StreamReader(file))
            {
                streamReader.ReadLine();

                while (!streamReader.EndOfStream)
                {
                    String[] row = streamReader.ReadLine().Split(',');
                    scores.Rows.Add(row);
                }
            }

            Boolean scoreFound = false;

            //
            // If user exists and new score is higher, update 
            //
            foreach (DataRow score in scores.Rows)
            {
                if ((String)score["name"] == player.Name)
                {
                    if ((int)score["score"] < player.Score)
                    {
                        score["score"] = player.Score;
                        score["time"] = elapsedtime;

                    }

                    scoreFound = true;
                    break;
                }
            }

            //
            // If user doesn't exist then add user/score
            //
            if (!scoreFound)
            {
                scores.Rows.Add(player.Name, player.Score, elapsedtime);
            }

            //
            // Write changes to CSV (empty then rewrite)
            //
            File.WriteAllText(file, string.Empty);

            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.AppendLine("name,score,time");

            foreach (DataRow score in scores.Rows)
            {
                stringBuilder.AppendLine(score["name"] + "," + score["score"] + "," + score["time"]);
            }

            File.WriteAllText(file, stringBuilder.ToString());
        }

        catch (Exception ex)
        {
            MessageBox.Show("Error saving high score:\n\n" + ex.ToString(), "Error");
        }

    }

чтобы кто-то мог отредактировать мой текущий код, чтобы сохранить пользовательские данные в порядке убывания с точки зрения оценки, которая была бы фантастической, и заранее спасибо.

1 Ответ

1 голос
/ 31 марта 2019

Для этого можно использовать метод DataTable.Select . С помощью метода select вы можете фильтровать и сортировать строки в таблице. Вот измененный оператор foreach, который использует метод для сортировки данных.

foreach (DataRow score in scores.Select(null, "score DESC"))
{
   stringBuilder.AppendLine(score["name"] + "," + score["score"] + "," + score["time"]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...