4

我正在使用以下代码从 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 获取数据......

4

2 回答 2

2

我会使用Fast CSV Reader,因为它非常快并且擅长识别 csv 文件结构。

于 2011-06-08T12:26:40.293 回答
2

双引号是csv 规范的一部分。如果您的数据包含双引号,则整个字段(或列)必须用双引号括起来,并且字段内的任何双引号都必须使用双引号进行转义。

所以你的行应该是这样的:

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

我没有使用任何 CSV 库,所以我不能推荐任何库,但您可以自己轻松地解析文件。只需逐行读取文件并用','分割。问题是跨越多行的字段....

编辑:总而言之,您需要修改您的 CSV 输入文件或找到一个更宽容的解析器,或者在找到格式错误的 CSV 记录时至少会抛出异常。乍一看,其他人建议的FAST CSV 阅读器似乎是一个不错的起点,因为它声称格式错误的 CSV 会导致它失败并出现有意义的异常。

于 2011-06-08T12:38:30.630 回答