Я делаю несколько предположений, поскольку вы не обновили свой вопрос, но предполагаете, что строка файла содержит строки в формате: "Score: [score] ~[Name] -- Timer: [mm:ss] -- [numCorrect]/41"
, а score
- это double
, а numCorrect
- int
(вы не показываете, откуда они берутся), вот один из способов справиться с этой ситуацией.
Во-первых, создайте класс со свойствами, которые вы хотите сохранить, который может создавать собственный экземпляр из строки (строки файла) и выводить себя в виде строки (для записи в файл):
[ 110]Затем создайте метод, который может создать экземпляр этого класса из данных вашей формы:
// Not sure where these come from so created these class fields
private const string Path = @"f:\public\temp\score.txt";
private double score = 0;
private int numCorrect = 0;
private static Result GetResultFromFormData()
{
return new Result
{
Score = score,
Name = textBox1.Text,
Time = TimeSpan.ParseExact(label9.Text, @"mm\:ss", CultureInfo.InvariantCulture),
CorrectCount = numCorrect)
};
}
Теперь мы можем заполнить список этих классов как из содержимого файла, так и из формы. Затем мы можем отсортировать список, используя Linq
в любом поле, которое мы хотим (в данном случае Score
), и можем записать отсортированный список обратно в файл:
private void button1_Click(object sender, EventArgs e)//Submit Button
{
if (isDone)
{
// Create a list of results from our file
List<Result> existingResults = File.ReadAllLines(Path).Select(Result.Parse).ToList();
// Add a new result to the list from the form data
existingResults.Add(GetResultFromFormData());
// Sort the list on the Score property
existingResults = existingResults.OrderBy(result => result.Score).ToList();
// Write the sorted list back to the file
File.WriteAllLines(Path, existingResults.Select(result => result.ToString()));
}
}
Теперь файл содержит его исходное содержимое плюс новый результат из формы, отсортированный по Score
.
Шаблонные файлы T4 могут быть интегрированы в проекты C++, но это - немного больше работы, чем с проектом C#/VB. Создайте новый текстовый файл в своем проекте C++ и дайте ему .tt расширение. Затем запишите свой шаблон как нормальный. Для проекта C++ затем нужна дальнейшая работа, чтобы заставить это преобразовывать шаблоны. Быстрым и грязным путем я добрался, это для работы должно было добавить сделанный на заказ шаг и иметь его, называют "C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe" непосредственно. Иначе я нашел, состояла в том, чтобы добавить пользовательская задача MSBuild. Инструкции могут быть найдены здесь
Эта страница имеет больше информации и некоторые хорошие ссылки на другие страницы при использовании генерации кода T4.
Задача MSBuild не будет работать как это файл vcproj (C ++), поэтому используется vcbuild. Самый простой способ скомпилировать tt - добавить настраиваемый шаг сборки, как показано ниже.
"C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe" -out "$(ProjectDir)\VSProject.cpp" -I "$(ProjectDir)" "$(ProjectDir)\VSProject.tt"
Я потратил несколько часов на изучение решения MSBuild Task, приведенного выше, и оно неплохо для управляемого кода, но я не вижу способа его использовать. для C ++ (без преобразования vcproj в csproj eek)