Изменить файл csv внутри программы C#

99
21 июня 2021, 14:30

Всем доброго времени суток! С приложением windows Forms пока сложно. Создал консольное приложение Я спарсил CSV файл, теперь хочу все данные записать в один массив string, просто каждую итерацию у меня значение в str записывается заново. Пробовал через цикл for, но у меня ничего не вышло.

            string[] str = {};
            string[] str_result = {};
            using (TextFieldParser tfp = new TextFieldParser(@"C:\Users\Хроматограф\Downloads\Telegram Desktop\История обменов.csv"))
            {
                int i = 0;
                tfp.TextFieldType = FieldType.Delimited;
                tfp.SetDelimiters(",");
                while (!tfp.EndOfData)
                {
                    str = tfp.ReadFields();
                }
            }

Файл CSV с данными формата2019-08-25 12:46:57.79, 1330206, 0.00076094, 487, 0.0000038, 640001, RUB, BTC, QIWI, Fast_BTC_Change, 12AE8f, purchase, confirm_payment.

Answer 1

всё данные находятся в одной ячейке

Формат CSV подразумевает, что содержимое ячеек таблицы отделяется друг от друга символами запятой или другим символом. По сути каждая строчка таблицы в CSV, это просто одна строка. Поэтому Excel и показывает данные таким образом.

Если Вас это совсем не устраивает, существует 2 варианта решить Вашу проблему:

  • Вам нужно распарсить CSV и сохранить данные в Excel (например через Interop или OfficeOpenXml). Только на выходе будет уже не csv, а xlsx;
  • Замените разделяющие запятые на символы табуляции. Тогда каждая колонка будет отображаться как положено. Однако, это костыль и его работоспособность в Excel старше 2003 не гарантируется.
Answer 2

Я создавал тему:

Как просто работать с / открыть / изменить / сохранить Excel - xlsx / CSV файлы

Если использовать класс из этой темы, то выйдет код:

Csv csv = new Csv(); //создаем инстанс читалки; Если нестандартный делимитер то new Csv('|');
csv.FileOpen("c:\\file1.csv"); //открываем файл
var rez = scv.Rows[0];// в rez записаны все ячейки из первой строчки csv как и было нужно

Дальше меняешь нужную ячейку и сейвишь методом сейв.

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

Answer 3

Пользователь @tym32167 подсказал такое решение моей задачи

 var str = new List<string>();
        using (TextFieldParser tfp = new TextFieldParser(@"C:\Users\Veles\Downloads\Telegram Desktop\Финансовый отчёт пп.csv"))
        {
            int i = 0;
            tfp.TextFieldType = FieldType.Delimited;
            tfp.SetDelimiters(",");
            while (!tfp.EndOfData)
            {
                str.AddRange(tfp.ReadFields());
            }
        }

Спасибо всем кто пытался помочь!

READ ALSO
Закрытие формы после исключения

Закрытие формы после исключения

Как сделать чтобы после выпада исключения форма не закрываласьНа примере, у меня есть форма с текстбоксами, если они заполнены то данные...

85
Как создать виртуальную таблицу (view) для EAV?

Как создать виртуальную таблицу (view) для EAV?

Имеются три, типичные для EAV, таблицы:

95
Использование trail Render и AddForce

Использование trail Render и AddForce

Нужно сделать след за 2д спрайтомИспользую trail Render,двигаю персонажа таким кодом:

113
Coхранение SqlCe в файл

Coхранение SqlCe в файл

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

79