Кавычки между текстом столбца CSV вызывают пропуск оставшихся столбцов при импорте данных CSV - PullRequest
4 голосов
/ 08 июня 2011

Я использую следующий код для извлечения данных из файла CSV:

    public DataTable GetCSVData(string CSVFileName)
    {
        string CSVConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + ConfigurationSettings.AppSettings["CSVFolder"].ToString() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False;";

        using (OdbcConnection Connection = new OdbcConnection(CSVConnectionString))
        {
            DataTable CSVDataTable = new DataTable();

            string SelectQuery = string.Format(@"SELECT * FROM [{0}]", CSVFileName);

            OdbcDataAdapter Adapter = new OdbcDataAdapter(SelectQuery, Connection);

            Adapter.Fill(CSVDataTable);

            return CSVDataTable;
        }
    }

Точная проблема заключается в том, если столбец CSV содержит данные, которые выделены жирным шрифтом и показаны в строке 1 ниже

Row1-> col1, "cdwdf" dsdfs , col2, col3

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

Если упомянутый текст столбца в строке 1 полностью заключен в кавычки ( "cdwdf dsdfs" ), данные извлекаются правильно.

Любой, пожалуйста, скажите мне, как получить данные из CSV в такой ситуации ...

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

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

Таким образом, ваша строка должна читаться какэто:

Row1-> col1,"""cdwdf"" dsdfs",col2,col3

Я не использовал никаких библиотек CSV, поэтому я не могу рекомендовать их, но вы можете легко разобрать файл самостоятельно.Просто прочитайте файл построчно и разделите на «,».Проблемы с этим связаны с полями, которые занимают несколько строк ....

РЕДАКТИРОВАТЬ: Итак, чтобы подвести итог, вам нужно изменить входной файл CSV или найти парсер, который более щадящийили это, по крайней мере, вызовет исключение, когда он найдет искаженную запись CSV.На первый взгляд Читатель FAST CSV , предложенный другими, кажется хорошим началом для начала, поскольку он утверждает, что неправильно сформированный CSV приводит к его отказу со значимым исключением.

2 голосов
/ 08 июня 2011

Я бы использовал Fast CSV Reader , поскольку он достаточно быстр и хорош для определения структуры файла CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...