csv列文本之间的引号导致在导入csv数据时跳过其余列
本文关键字:csv 数据 导入 余列 文本 之间 | 更新日期: 2023-09-27 17:58:35
我正在使用以下代码从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行所示
行1->col1,"cdwdf"dsdfs,col2,col3
col2和col3(突出显示的文本之后的列)在使用上面的代码获取数据时被跳过,并继续从下一行获取数据。
如果第1行中提到的列文本完全位于引号内("cdwdf-dsdfs"),则数据将被正确提取。
请告诉我在这种情况下如何从csv中获取数据。。。
双引号是csv规范的一部分。如果数据包含双引号,则整个字段(或列)必须用双引号括起来,并且必须使用双引号转义字段中的任何双引号。
所以你的行应该是这样的:
Row1-> col1,"""cdwdf"" dsdfs",col2,col3
我还没有使用任何CSV库,所以我不推荐使用任何,但您可以轻松地自己解析文件。只需逐行读取文件,然后按","拆分即可。这方面的问题是跨越多行的字段。。。。
编辑:因此,总结一下,您需要修改CSV输入文件,或者找到一个更宽容的解析器,或者在发现格式错误的CSV记录时至少会抛出异常。乍一看,其他人建议的FAST CSV阅读器似乎是一个很好的起点,因为它声称格式错误的CSV会导致它失败,并出现一个有意义的异常。
我会使用Fast CSV Reader,因为它非常快速,并且善于识别CSV文件结构。