CSV форматирование имеет некоторые ошибки. Задавали ли вы себе следующие вопросы:
- Есть ли в моих данных запятые?
- Есть ли в моих данных двойные кавычки?
- Есть ли в моих данных новые строки?
- Нужно ли поддерживать строки Unicode?
Я вижу несколько проблем в вашем коде выше. Прежде всего, запятая ... вы убираете запятые:
CsvLine.Append(Format(b.Price, "c").Replace(",", ""))
Почему? В CSV вы должны окружать все, что имеет запятые с кавычками:
CsvLine.Append(String.Format("\"{0:c}\"", b.Price))
(или что-то в этом роде ... мой VB не очень хорош). Если вы не уверены, есть ли запятые, но заключите их в кавычки. Если в строке есть кавычки, вам нужно избежать их, удвоив их. "
становится ""
.
b.Title.Replace("\"", "\"\"")
Тогда окружите это кавычками, если хотите. Если в вашей строке есть символы новой строки, вам нужно заключить строку в кавычки ... да, буквенные символы новой строки допускаются в файлах CSV. Это выглядит странно для людей, но все хорошо.
Хороший писатель CSV требует некоторых мыслей. Хороший читатель CSV (синтаксический анализатор) просто сложен (и нет, регулярное выражение недостаточно хорошо для анализа CSV ... это даст вам только 95% пути).
И еще есть Unicode ... или, в общем, проблемы I18N (интернационализация). Например, вы убираете запятые из форматированной цены. Но это при условии, что цена отформатирована так, как вы ожидаете в США. Во Франции форматирование чисел меняется на противоположное (вместо запятых используются периоды, а и наоборот ). Итог, используйте форматирование, не зависящее от культуры, где это возможно.
Хотя проблема здесь заключается в , генерирующем CSV, неизбежно вам потребуется проанализировать CSV. В .NET лучший анализатор, который я нашел (бесплатно) - Fast CSV Reader на CodeProject . Я фактически использовал его в рабочем коде, и он действительно очень быстрый и очень простой в использовании!