Запись в одну и ту же строку csv дважды?

Я пытаюсь создать код, который будет записывать значения в файл csv, выполнять какой-либо другой несвязанный код, а затем добавлять дополнительное значение в эту строку.

    static void Main(string[] args)
    {
        int newNumber = 110;
        var records = new List<MovieInfo>
        {
            new MovieInfo {Rating = newNumber, Price = 44},
        };

        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            HasHeaderRecord = false,
        };

        string filePath = @"C:\file\path\go\brrrr";
        
        using (var stream = File.Open(filePath, FileMode.Append))
        using (var writer = new StreamWriter(stream))
        using (var csv = new CsvWriter(writer, config))
        {
            csv.WriteRecords(records);
        }

        //--------------------------------------
        //other unrelated code things happen here
        //--------------------------------------

        double value = 4;
        string thirdValue = "," + value;
        File.AppendAllText(filePath, thirdValue);
    }
    public class MovieInfo
    {
        public int Rating { get; set; }
        public int Price { get; set; }
    }

Вывод этого кода таков

Выходной код

Можно ли настроить код так, чтобы на выходе было 110,44,4? Дополнительная информация, если это уместно, будет заключаться в том, что рассматриваемая строка всегда будет последней в файле. Любая помощь приветствуется

CsvWriter создает новую строку после каждой записи, поэтому вам придется удалить то, что может быстро запутаться. Рассматривали ли вы возможность отложить фактическую запись записи и вместо этого добавить значение в класс записи?

Creyke 10.04.2022 18:32

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

Anderson 10.04.2022 18:46
Получение данных из формы с помощью JavaScript - краткое руководство
Получение данных из формы с помощью JavaScript - краткое руководство
Получить данные из формы с помощью JS очень просто: вы запрашиваете элемент формы, передаете его конструктору new FormData() и, наконец, получаете...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
0
2
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы вызываете csv.WriteRecords(записи);, все записи записываются в выходной файл, и каждая запись отделяется новой строкой, даже к последней записи добавляется новая строка.

Вместо того, чтобы записывать каждую запись за один раз, вы можете записывать запись за раз с помощью метода WriteRecord. Этот метод не записывает новую строку. Новая строка добавляется при вызове метода NextRecord. Таким образом, зацикливая свои записи минус один, вы можете контролировать вывод новой строки в последней строке:

void Main()
{
    int newNumber = 110;
    var records = new List<MovieInfo>
    {
        new MovieInfo {Rating = 200, Price = 30},
        new MovieInfo {Rating = newNumber, Price = 44},
    };

    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        HasHeaderRecord = false,
    };

    string filePath = @"E:\temp\movieinfo.csv";

    using (var stream = File.Open(filePath, FileMode.Append))
    using (var writer = new StreamWriter(stream))
    using (var csv = new CsvWriter(writer, config))
    {
        // Write all records minus one.
        for (int x = 0; x < records.Count - 1; x++)
        {
            csv.WriteRecord(records[x]);
            csv.NextRecord();
        }

        // Write the last record without the newline
        csv.WriteRecord(records[records.Count-1]);
    }

    //--------------------------------------
    //other unrelated code things happen here
    //--------------------------------------

    double value = 4;
    string thirdValue = "," + value;
    File.AppendAllText(filePath, thirdValue);

}

Другие вопросы по теме