c запись в csv файл

Я пытаюсь записать в файл csv строка за строкой, используя язык С#. Вот моя функция

Вся функция выполняется внутри цикла, и каждая строка должна быть записана в файл csv . В моем случае следующая строка перезаписывает существующую строку, и в конце я получаю единственную запись в CSV файле, которая является последней. Как я могу записать все строки в csv файл?

14 ответов

224 Решение Johan [2013-09-12 09:47:00]

ОБНОВИТЬ

Еще в наивные времена я предлагал делать это вручную (это было простое решение простого вопроса), однако из-за того, что это становилось все более и более популярным, я бы рекомендовал использовать библиотеку CsvHelper, которая выполняет все проверки безопасности и т.д.

CSV намного сложнее, чем предполагает вопрос/ответ.

Оригинальный ответ

Поскольку у вас уже есть цикл, попробуйте сделать это следующим образом:

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

Вы можете заменить

если вы хотите сохранить предыдущие версии CSV в том же файле

С# 6

Если вы используете С# 6.0, то вы можете сделать следующее

РЕДАКТИРОВАТЬ

Вот ссылка на вопрос, который объясняет, что делает Environment.NewLine

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

File.AppendAllText() открывает новый файл, записывает содержимое и закрывает файл. Открытие файлов — это очень ресурсоемкая операция, чем запись данных в открытый поток. Открытиезакрытие файла внутри цикла приведет к снижению производительности.

Подход, предложенный Йоханом, решает эту проблему, сохраняя все выходные данные в памяти и затем записывая их один раз. Однако (в случае больших файлов) программа будет потреблять большое количество оперативной памяти и даже сбой с OutOfMemoryException

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

обн. Размещено в нужном месте

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

В этом вопросе упоминаются несколько вариантов.

Я использую два решения синтаксического анализа, поскольку их очень легко поддерживать

Вместо этого просто используйте AppendAllText:

Единственный недостаток AppendAllText заключается в том, что он будет вызывать ошибку, если файл не существует, поэтому это нужно проверить

Извините, светлый момент перед чтением документации. В любом случае метод WriteAllText перезаписывает все, что было ранее записано в файле, если файл существует.

Обратите внимание, что ваш текущий код не использует правильные новые строки, например, в «Блокноте» вы увидите все как одну длинную строку. Измените код на это, чтобы иметь соответствующие новые строки:

6 Oliver [2013-09-12 10:09:00]

Вместо того чтобы вызывать каждый раз AppendAllText() , вы должны подумать об открытии файла один раз, а затем написать целое содержимое один раз:

TL; DR Я пытаюсь взять поток данных и заставить его записать в файл .csv. Все проработано, кроме части записи, которая, я думаю, просто из-за того, что я неправильно ссылаюсь на файл .csv. Но я новичок в этом деле и не могу понять, как правильно на него ссылаться, поэтому мне нужна помощь.

Здравствуйте, и большое спасибо заранее всем, кто может помочь мне с этим! Немного предварительной информации, моя > (ссылка для тех, кто достаточно заинтересован, чтобы посмотреть на нее), которая должна передавать значения EMG, акселерометра, гироскопа и ориентации в файл .csv. Я так близок к тому, чтобы заставить приложение работать, но мой недостаток опыта программирования наконец настиг меня, и я застрял на чем-то довольно простом. Я знаю, что приложение может передавать данные, так как я смог заставить его печатать значения EMG в области отладки. Я также могу заставить приложение открыть файл .csv, используя этот код:

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

Это структура функции, которая должен открыть файлы: (Примечание: приложение предназначено для открытия файла в том же каталоге, что и он сам)

Это помощник для печати данных акселерометра и гироскопа (похоже, что нет ничего подобного для печати данных EMG, но я знаю, что это так, так что … Watevs):

И это структура функции, которая использует помощник:

Я разговаривал с сотрудником Thalmic Labs (парнем, который на самом деле создал приложение), и он сказал, что это звучит так: если приложение не было полностью сломано, у меня потенциально просто были проблемы с разрешениями на моем компьютере. На этом компьютере много пользователей, так что это вполне может иметь место, хотя я, конечно, надеюсь, что нет, и я все же хотел бы попытаться выяснить это еще раз, прежде чем бросать полотенце. Еще раз спасибо всем, кто может помочь! ��

Решение

Мое воображение подводит меня. Вы пытались писать или читать из ostringstream или istringstream объектов? Это может быть информативным. Вот правильная строка:

Обратите внимание, что C ++ не имеет встроенной поддержки потоковой передачи кода .csv, хотя, возможно, вам придется выполнять эти преобразования самостоятельно. �� Все может работать лучше, если вы замените символы «/» на (doubled) «//» …

Pirnazar

Well-known member

Загрузка csv файла с выводом данных в dataGridView
Сегодня хочу показать на простом примере, как выполняется загрузка и чтение CSV файла с помощью языка c#. И так, для начала создадим Windows Forms приложение, после чего поместим на форму два элемента управления: кнопку и datagridview, в который будем выводить полученные данные.

Затем создадим csv файл (cars.csv) и поместим в него 4 записи. Как Вы, наверное, знаете, формат csv подразумевает наличие некоторых правил формирования документа, так например: каждая строка заканчивается символами CLRF, а каждая запись, которая содержится в строке, запятыми.

На этом подготовительная работа закончена и теперь переходим к решению основной задачи.

И так, чтобы прочитать и загрузить CSV файл нам понадобиться метод ReadAllLines, который позволяет построчно считать данные из файла.

Строки получены и теперь нам осталось выполнить всего две задачи:

1. Разбить каждую строку массива cars на отдельные значения. Для этого воспользуемся методом Split, в качестве параметра в который передадим знак-разделитель, которым в данном примере является запятая.

2. Вывести полученные данные в окно datagridview. Для решения этой задачи создадим небольшую таблицу (DataTable), которая содержит пять колонок: фирма, название, год, максимальная скорость и цена, после чего заполним её ранее полученными одиночными значениями.

Загружаем CSV файл и выводим данные в dataGridView.

На этом всё, если есть какие-то вопросы, то оставляйте их в комментариях.

Оцените статью