Чтобы преобразовать строку CSV в список элементов, вы можете написать программу, которая отслеживает состояние (в кавычках или вне кавычек), когда оно обрабатывает строку по одному символу за раз, и испускает найденные элементы , Правила цитирования в CSV: weird, поэтому вы хотите убедиться, что у вас много тестовых данных.
Государственная машина может идти, как это:
- сканирования до цитаты (перейти к 2) или запятую (3) выберите
- , если следующий символ цитата, добавьте только один из двух кавычки в поле и вернуться к 1. В противном случае перейдите к 4 (или сообщите об ошибке, если котировка не является первым символом в поле).
- испускать поле, перейдите к 1
- сканирования до цитаты (перейти к 5)
- , если следующий символ цитата, добавьте только один из двух кавычек в поле и вернуться к 4. В противном случае, выделяющий поле, сканирование запятой, и перейти к 1.
Это должно материал правильно сканирования, как:
- привет, мир, 123, 456
- "привет мир", 123, 456
- «Он сказал„“Привет, мир!» «», «И я сказал привет»
- «» 17.5179C «» (правильно сообщает об ошибке, так как должна быть разделителем между первой строкой в кавычках "" и второе поле 17.5179C).
Другим способом было бы найти существующую библиотеку, которая сделает это хорошо. Несомненно, CSV достаточно распространен, что такая вещь должна существовать?
редактировать:
Вы упоминаете, что скорость имеет жизненно важное значение, так что я хотел бы отметить, что (при условии, что строки в кавычках не разрешается включать строку возвращает ...) каждая строка может обрабатываться независимо в параллельны друг другу.
Мне нужно будет подтвердить, но я думаю, что клиент хочет «17.5179C», «в конечном итоге, как« 17.5179C », в базе данных. – kpollock
Поскольку существует много вариантов, возможно, это имеет смысл для вашего клиента. Я рекомендую вам получить четкую спецификацию (или, по крайней мере, множество примеров того, что они хотят). Должно быть легко адаптировать алгоритм, который я там установил, чтобы использовать «» как разделители для цитируемых строк вместо «. – redtuna
@kpollock. Или вы можете просто использовать парсер CSV, встроенный в платформу .NET (http://msdn.microsoft .com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx) и получить его в первый раз. – Tergiver