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

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

Я пытаюсь вывести некоторые данные в CSV файл, и он выводит его в файл, но он не разделяет данные на разные столбцы и, кажется, выводит данные некорректно.

Время и сила (Н/м) находятся в столбцах A и B соответственно, но значения t и F печатают первую строку.

Каков синтаксис для их разделения для печати t в столбцы A и F в столбец B?

В CSV файле нет ничего особенного. Вы можете создать их с помощью текстового редактора, просто следуя основным правилам. Используемый разделитель RFC 4180 (tools.ietf.org/html/rfc4180) — это запятая ‘,’ не точка с запятой ‘;’. Такие программы, как MS Excel, ожидают запятую как разделитель.

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

Итак, создавая CSV, вы создаете свой поток и добавляете свои строки так:

Это приведет к созданию файла CSV, который будет выглядеть при открытии в MS Excel:

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

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

Читайте также:  Geforce4 mx440 8x 64mb ddr tv out

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

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

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

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

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

Решение

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

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

Читайте также:  Huawei mediapad m5 lite lte отзывы

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

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

14 ответов

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

ОБНОВИТЬ

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

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

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

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

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

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

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

С# 6

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

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

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

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

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

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

Читайте также:  Fallout 1 русификатор 1с для steam

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

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

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

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

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

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

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

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

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

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

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

Ссылка на основную публикацию
Adblock detector