Как использовать шаблоны генерации кода T4 с VS проекты C++?

Я делаю несколько предположений, поскольку вы не обновили свой вопрос, но предполагаете, что строка файла содержит строки в формате: "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.

10
задан John Saunders 27 July 2009 в 16:59
поделиться

2 ответа

Шаблонные файлы T4 могут быть интегрированы в проекты C++, но это - немного больше работы, чем с проектом C#/VB. Создайте новый текстовый файл в своем проекте C++ и дайте ему .tt расширение. Затем запишите свой шаблон как нормальный. Для проекта C++ затем нужна дальнейшая работа, чтобы заставить это преобразовывать шаблоны. Быстрым и грязным путем я добрался, это для работы должно было добавить сделанный на заказ шаг и иметь его, называют "C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe" непосредственно. Иначе я нашел, состояла в том, чтобы добавить пользовательская задача MSBuild. Инструкции могут быть найдены здесь

Эта страница имеет больше информации и некоторые хорошие ссылки на другие страницы при использовании генерации кода T4.

11
ответ дан 3 December 2019 в 22:02
поделиться

Задача 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)

4
ответ дан 3 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: