Замена данных в файле со списком рекордов - C#
Формулировка задачи:
подскажите как откорректировать код чтобы справить ошибки, во-первых, при попытки замены очков пользователя, он заменяет у старого и и дублирует запись, во-вторых, при попытке записи в чистый документ запись не происходит
class Program
{
class Score
{
public string name;
public int score;
public static explicit operator Score(string v)
{
throw new NotImplementedException();
}
}
static void Main(string[] args)
{
Random rnd = new Random();
int score = 0;
#region
// 1
score = score + Test(rnd.Next(1, 10), rnd.Next(1, 10));
#endregion
List<Score> scoreTable = ReadScores();
Score newScore = new Score();
Console.WriteLine("Введите имя пользователя");
string nameUsers = Console.ReadLine();
Console.WriteLine("Введите команду");
string command = Console.ReadLine();
if (command == "clear")
{
System.IO.File.Delete("scores.txt");
System.IO.File.Create("scores.txt");
return;
}
Console.Clear();
for (int i = 0; i < scoreTable.Count; i++)
{
if (scoreTable[i].name == nameUsers)
{
scoreTable[i].name = nameUsers;
scoreTable[(i)].score = score;
}
else
{
newScore.name = nameUsers;
newScore.score = score;
}
}
scoreTable.Add(newScore);
scoreTable.Sort(CompareScore);
if (scoreTable.Count > 7)
{
scoreTable.RemoveRange(7, scoreTable.Count - 7);
}
DrawScores(scoreTable);
SaveScores(scoreTable);
Console.ReadKey();
}
static int CompareScore(Score r1, Score r2)
{
return r2.score - r1.score;
}
private static List<Score> ReadScores()
{
if (System.IO.File.Exists("scores.txt") == false)
{
System.IO.File.Create("scores.txt");
}
string rawData = System.IO.File.ReadAllText("scores.txt");
string[] parsedData;
parsedData = rawData.Split(new string[] { " ", "\r\n" },
StringSplitOptions.RemoveEmptyEntries);
List<Score> scoreTable = new List<Score>();
for (int i = 0; i < parsedData.Length - 1; i += 2)
{
Score userScore = new Score();
userScore.name = parsedData[i];
userScore.score = Convert.ToInt32(parsedData[i + 1]);
scoreTable.Add(userScore);
}
return scoreTable;
}
private static void SaveScores(List<Score> scoreTable)
{
string rawData = "";
for (int i = 0; i < scoreTable.Count; i++)
{
rawData += scoreTable[i].name + " " + scoreTable[i].score + "\r\n";
}
System.IO.File.WriteAllText("scores.txt", rawData);
}
private static void DrawScores(List<Score> results)
{
Console.WriteLine("Таблица рекордов.");
for (int i = 0; i < results.Count; i++)
{
Console.CursorLeft = 0;
Console.Write("{0}.{1}", i + 1, results[i].name);
Console.CursorLeft = 30;
Console.WriteLine(results[i].score);
if (i == results.Count - 1)
{
Console.CursorLeft = 0;
Console.Write("Свободное место");
Console.CursorLeft = 30;
Console.WriteLine("0");
}
}
}Решение задачи: «Замена данных в файле со списком рекордов»
textual
Листинг программы
for (int i = 0; i < parsedData.Length; i += 2)
{
Score userScore = new Score();
userScore.name = parsedData[i];
userScore.score = Convert.ToInt32(parsedData[i + 1]);//ошибка "индекс находится вне границ массива" возникает периодически
scoreTable.Add(userScore);
}